猫鼬-强制集合名称


120

我正在尝试使用猫鼬在其中创建数据库和集合。我的代码是:

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

当我运行此代码时,猫鼬创建了名为UserInfo的集合,而不是userinfo。如何在猫鼬中强加集合名称?


14
有趣的事实:猫鼬知道牛的复数是牛,但不知道鹅的复数是鹅。
肖恩·莱顿德雷

Answers:


201

这应该做

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

有关更多信息,请参见Mongoose文档中的此链接


7
谢谢你 这是相关的链接:mongoosejs.com/docs/guide.html#collection
Jon Page

2
感谢@JonPage,我想知道为什么我的Person对象集合被命名为people。您提供的链接是一个很好的参考。我认为这种在创建模式时设置自定义集合名称的方法比在创建模型时定义集合名称的其他方法更好。
巴拉特2015年

这超级有帮助。我花了两天时间尝试查询一些内容。
Holt Mansfield '18

79

如果您使用的是猫鼬2.0.0,请将collectionName作为第三个参数传递

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

在模型级别上声明自定义集合名称的完美方法。
tezqa

25

猫鼬默认情况下会在集合名称中添加“ 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();

1
这是最好的建议。我一直发现,最简单的方法是在mongoose.model()中传递集合名称。指出猫鼬如何使集合名称具有多个含义也很有用,这在我刚开始时会感到困惑。
约翰·莫里森

14

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

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

猫鼬所做的是,当不传递任何集合参数时,猫鼬通过使模型名称复数来产生一个集合名称。如果您不喜欢这种行为,请传递一个集合名称或设置您的模式集合名称选项。

例:

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

要么

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

要么

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


9

猫鼬维护者在这里。我们建议对集合名称执行mongoose.model('UserInfo', UserInfo, 'UserInfo');,第三个arg mongoose.model()这是相关的文档


1

回答:

mongoose.model('UserInfo', UserInfo, 'userinfo'); //3rd parameter 'userinfo': as collection name

语法的更好解释:

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

参数说明:

  • 第一个参数-名称模型名称
  • 第二个参数[模式]模式名称
  • 第三个参数[collection]集合名称(可选,由模型名称得出)
  • 第四个参数[skipInit]是否跳过初始化(默认为false)

0

您的模型名称:userInfo.js

在快速路由文件或app.js中

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb');

然后在您的userInfo.js中

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.