mongodb Mongoose --部队集合名称

zxlwwiss  于 2023-10-16  发布在  Go
关注(0)|答案(9)|浏览(125)

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

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创建了名为UserInfo而不是userinfo的集合。如何在mongoose中强制使用集合名?

4uqofj5v

4uqofj5v1#

这个应该可以了

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

请参阅Mongoose文档中的此链接以获取更多信息。

jc3wubiy

jc3wubiy2#

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

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

vcirk6k63#

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

txu3uszq4#

mongoose.model的API结构如下:

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

mongoose所做的是,当没有集合参数被传递时,Mongoose通过将模型名称变为复数来生成一个集合名称。如果您不喜欢这种行为,可以传递一个集合名称或设置schemas集合名称选项。
范例:

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

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

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

rlcwz9us5#

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

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

jecbmhm36#

Mongoose 维修员在这里。我们建议使用mongoose.model('UserInfo', UserInfo, 'UserInfo');mongoose.model()的第三个参数是集合名称。这是相关文件

cbjzeqam

cbjzeqam7#

module.exports = mongoose.model('name', schema, 'collection')上传递第三个参数会覆盖基于模型名称的自动集合名称,这已经得到了回答。但还有两种方法
per mongoose.model doco link:https://mongoosejs.com/docs/api.html#mongoose_Mongoose-model
有3种方法可以手动输入集合名称:

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

// or

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

// or

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

whhtz7ly8#

答案:

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

更好的语法解释:

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

参数说明:

  • 第一个参数-名称型号名称
  • 第二个参数[schema] schema name
  • 第三个参数[collection] collection name(可选,由model name导出)
  • 第四个参数[skipInit]是否跳过初始化(默认为false)
7fyelxc5

7fyelxc59#

您的型号名称:userInfo.js
在Express路由文件或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);

相关问题