为什么mongoose总是添加一个s到我的collections名称的末尾

例如,这段代码会创build一个名为“datas”的集合

var Dataset = mongoose.model('data', dataSchema); 

而这段代码会产生一个名为“users”的集合

 var User = mongoose.model('user', dataSchema); 

谢谢

  • 在Mongoose模式中指定一个inheritance的通用模型
  • 如何在Mongoose模型钩子中自动设置“updatedBy”
  • 发布数据时发生超时错误
  • 通过Mongoose在MongoDB中存储另一个文档中embedded的文档的副本
  • 最好的方法来包装mongoosevalidation错误
  • 如何处理与MongoDB和node.js的asynchronous?
  • date在mongoose?
  • 问题与mongoose时间戳记和时代转换为date()
  • mongoose正在努力变得聪明。 但是,你可以强迫它成为你想要的任何东西:

    var dataSchema = new Schema({..}, { collection: 'data' })

    mongoose.model的API结构是这样的:

     Mongoose#model(name, [schema], [collection], [skipInit]) 

    什么mongoose做的是,当没有收集parameter passing时,Mongoose通过复制模型名称来产生一个集合名称。 如果您不喜欢这种行为,请传递集合名称或设置您的模式集合名称选项。

    例:

     var schema = new Schema({ name: String }, { collection: 'actor' }); 

    要么

     schema.set('collection', 'actor'); 

    要么

     var collectionName = 'actor' var M = mongoose.model('Actor', schema, collectionName); 

    您可以简单地添加一个string作为第三个参数来定义集合的实际名称。 扩展你的例子,把名字分别保存为datauser

     var Dataset = mongoose.model('data', dataSchema, 'data'); var User = mongoose.model('user', dataSchema, 'user'); 

    您可以添加集合名称作为第三个参数。 使用Typescript查看示例:

     import DataAccess = require('../DataAccess'); import IUser = require("../../Models/Interfaces/IUser"); var mongoose = DataAccess.mongooseInstance; var mongooseConnection = DataAccess.mongooseConnection; class UserSchema { static get schema () { var schema = mongoose.Schema({ _id : { type: String }, Name: { type: String, required: true }, Age: { type: Number, required: true } }); return schema; } } var schema:any = mongooseConnection.model<IUser>("User", UserSchema.schema,"User"); export = schema;