1.0.40 • Published 11 months ago

mongosch v1.0.40

Weekly downloads
-
License
MIT
Repository
-
Last release
11 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.39

12 months ago

1.0.38

12 months ago

1.0.40

11 months ago

1.0.37

2 years ago

1.0.36

2 years ago

1.0.35

2 years ago

1.0.34

2 years ago

1.0.33

2 years ago

1.0.32

2 years ago

1.0.31

2 years ago

1.0.30

2 years ago

1.0.29

2 years ago

1.0.28

2 years ago

1.0.27

2 years ago

1.0.25

2 years ago

1.0.24

2 years ago

1.0.23

2 years ago

1.0.22

2 years ago

1.0.21

2 years ago

1.0.20

2 years ago

1.0.19

2 years ago

1.0.18

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago