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

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

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

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

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

谢谢

mongoose正在努力变得聪明。 但是,你可以强迫它成为你想要的任何东西:

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

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

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

什么mongoose做的是,当没有收集参数被传递时,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;