Mongoose the Typescript way…?

后端 未结 14 590
遥遥无期
遥遥无期 2020-11-28 19:27

Trying to implement a Mongoose model in Typescript. Scouring the Google has revealed only a hybrid approach (combining JS and TS). How would one go about implementing the

14条回答
  •  一个人的身影
    2020-11-28 20:10

    Sorry for necroposting but this can be still interesting for someone. I think Typegoose provides more modern and elegant way to define models

    Here is an example from the docs:

    import { prop, Typegoose, ModelType, InstanceType } from 'typegoose';
    import * as mongoose from 'mongoose';
    
    mongoose.connect('mongodb://localhost:27017/test');
    
    class User extends Typegoose {
        @prop()
        name?: string;
    }
    
    const UserModel = new User().getModelForClass(User);
    
    // UserModel is a regular Mongoose Model with correct types
    (async () => {
        const u = new UserModel({ name: 'JohnDoe' });
        await u.save();
        const user = await UserModel.findOne();
    
        // prints { _id: 59218f686409d670a97e53e0, name: 'JohnDoe', __v: 0 }
        console.log(user);
    })();
    

    For an existing connection scenario, you can use as the following (which may be more likely in the real situations and uncovered in the docs):

    import { prop, Typegoose, ModelType, InstanceType } from 'typegoose';
    import * as mongoose from 'mongoose';
    
    const conn = mongoose.createConnection('mongodb://localhost:27017/test');
    
    class User extends Typegoose {
        @prop()
        name?: string;
    }
    
    // Notice that the collection name will be 'users':
    const UserModel = new User().getModelForClass(User, {existingConnection: conn});
    
    // UserModel is a regular Mongoose Model with correct types
    (async () => {
        const u = new UserModel({ name: 'JohnDoe' });
        await u.save();
        const user = await UserModel.findOne();
    
        // prints { _id: 59218f686409d670a97e53e0, name: 'JohnDoe', __v: 0 }
        console.log(user);
    })();
    

提交回复
热议问题