mongoose – 力量集合名称

我正在尝试使用mongoose在其中创build一个数据库和一个集合。 我的代码是:

var mongoose = require('mongoose'); var db = mongoose.connect('mongodb://localhost/testdb'); var Schema = mongoose.Schema; var UserInfo = new Schema({ username : String, password : String }); mongoose.model('UserInfo', UserInfo); var user = db.model('UserInfo'); var admin = new user(); admin.username = "sss"; admin.password = "ee"; admin.save(); 

当我运行这个代码时,mongoose创build了名为UserInfo的集合,而不是userinfo。 如何在mongoose强制收集名称?

这应该做到这一点

 var UserInfo = new Schema({ username : String, password : String }, { collection: 'userinfo' }); 

如果您正在使用mongoose 2.0.0,请传递collectionName作为第三个参数

 mongoose.model('UserInfo', UserInfo, 'UserInfo'); 

mongoose会默认添加“s”到集合名称。 如果你想避免只是传递第三个参数作为集合的名称

 var mongoose = require('mongoose'); var db = mongoose.connect('mongodb://localhost/testdb'); var Schema = mongoose.Schema; var UserInfo = new Schema({ username : String, password : String }); mongoose.model('UserInfo', UserInfo, 'UserInfo') tan = new user(); admin.username = "sss"; admin.password = "ee"; admin.save(); 

您需要在架构中设置集合名称。

 new Schema({...},{collection: 'userInfo'}); 

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);