【问题标题】:Mongodb collection name changed after creation创建后MongoDB集合名称更改
【发布时间】:2017-08-24 01:21:23
【问题描述】:

问题是,然后我运行此代码,在 Windows 上使用 Robomongo 检查数据库记录后,我只看到一个名为“maximas”的集合,其中包含两条记录, 如果我从代码中删除 Model2,创建后的结果将是相同的,但必须是集合“最大值”。

代码中是否有我看不到的错误,或者这个词是保留的,有什么想法吗?

代码,

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/mymodels', (e)=>{
if(e) throw e;
});

var schema = new mongoose.Schema({
text: {type: String}
});

var Model1 = mongoose.model('maxima', schema);

var Model2 = mongoose.model('maximas', schema);

var newData1 = new Model1({
text: 'test'
});

var newData2 = new Model2({
text: 'test'
});

newData1.save((e)=>{
if(e) throw e;
console.log('Saved');
});


newData2.save((e)=>{
if(e) throw e;
console.log('Saved');
});

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:

    Mongoose 会自动将您的模型名称复数作为集合名称。这就是为什么它们都是相同的,因为第二个集合名称已经是复数形式了。

    您可以将所需的集合名称作为第三个模型参数传递:

    var Model1 = mongoose.model('maxima', schema, 'maxima');
    
    var Model2 = mongoose.model('maximas', schema, 'maximas');
    

    注意:您还可以将集合名称指定为架构中的选项:

    var schema = new mongoose.Schema({
        text: { type: String }
    }, {
        collection: 'maxima'
    });
    

    ...但在这种情况下,您将需要第二个模式,因此上述第一种方法更适合此处。

    【讨论】:

    • 是的,你是对的,我发现 Mongoose 正在努力变得聪明。但是,您可以将其强制为您想要的任何内容: var dataSchema = new Schema({..}, { collection: 'data' }) ,
    • 很高兴这对您有所帮助
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2014-09-02
    • 2013-08-29
    • 2014-09-22
    相关资源
    最近更新 更多