1.0.37 • Published 7 months ago

mongosch v1.0.37

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

Mongosch: Model Generation for MongoDB

Automatically generate model classes based on your model definitions to simplify server-side logic.

Table of Contents

Installation

Install mongosch as a development dependency:

npm install --save-dev mongosch

Quick Start

Define Models

Create an entry point file, for example models-entry-point.js, to define your models. Below is a sample code snippet that defines a User and a Post model.

import {
  defaultFieldTypeDate,
  EnumFieldString,
  defaultFieldTypeModelReference,
  defaultFieldTypeString,
  Field,
  FieldTypeEnumString,
  FieldTypeObject,
  Model
} from "mongosch";
import { getCountries } from "libphonenumber-js";

// Define Phone FieldType
const Phone = FieldTypeObject({
  name: "Phone",
  properties: [
    Field({
      name: "countryCode",
      description: "Country code of the phone",
      fieldType: FieldTypeEnumString({
        name: "CountryCode",
        fields: getCountries().map((country) =>
          EnumFieldString({ value: country, name: country })
        )
      })
    }),
    Field({
      name: "nationalNumber",
      description: "National number",
      fieldType: defaultFieldTypeString()
    })
  ]
});

// Define User Model
function User() {
  return Model({
    className: "User",
    collectionName: "users",
    fields: [
      Field({
        description: "Phone number",
        fieldType: Phone,
        name: "phone"
      }),
      Field({
        description: "Date when the user was created",
        fieldType: defaultFieldTypeDate(),
        name: "createdAt"
      })
    ]
  });
}

// Define Post Model
const Post = Model({
  collectionName: "posts",
  className: "Post",
  fields: [
    Field({
      fieldType: defaultFieldTypeString(),
      name: "title",
      description: "Post title"
    }),
    Field({
      description: "User that authored the post",
      name: "authorId",
      fieldType: defaultFieldTypeModelReference({
        model: User()
      })
    }),
    Field({
      name: "createdAt",
      description: "Date when the post was created",
      fieldType: defaultFieldTypeDate()
    })
  ]
});

export default [Post, User];

Generate Models

Run the following command to generate model classes based on your definitions:

npx mongosch --input models-entry-point.js --output models

Utilize Generated Models

Here's how you can use the generated models in your application:

import { DatabaseClient } from "./models";
import { IPost } from "./models/Post";
import { MongoClient, ObjectId } from "mongodb";

const url = "mongodb://database";

(async () => {
  // Initialize Database Client
  const models = new DatabaseClient((await MongoClient.connect(url)).db("app"));

  // Fetch a Post by its ID
  const post: IPost = await models.Post.find({
    _id: new ObjectId("6522f4be1d5091b42f81521d")
  });

  // Populate referenced models
  const { users } = await models.Post.populate();
  console.log(users);
})();
1.0.37

7 months ago

1.0.36

7 months ago

1.0.35

7 months ago

1.0.34

7 months ago

1.0.33

7 months ago

1.0.32

7 months ago

1.0.31

7 months ago

1.0.30

7 months ago

1.0.29

7 months ago

1.0.28

7 months ago

1.0.27

7 months ago

1.0.25

7 months ago

1.0.24

7 months ago

1.0.23

7 months ago

1.0.22

7 months ago

1.0.21

7 months ago

1.0.20

7 months ago

1.0.19

7 months ago

1.0.18

7 months ago

1.0.17

7 months ago

1.0.16

7 months ago

1.0.15

7 months ago

1.0.14

7 months ago

1.0.13

7 months ago

1.0.12

7 months ago

1.0.11

7 months ago

1.0.10

7 months ago

1.0.9

7 months ago

1.0.8

7 months ago

1.0.7

7 months ago

1.0.6

7 months ago

1.0.5

7 months ago

1.0.4

7 months ago

1.0.3

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago