【问题标题】:How to create a collection automatically in mongoDB if it's not already there?如果 mongoDB 中还没有集合,如何自动创建集合?
【发布时间】:2014-10-13 20:15:26
【问题描述】:

我正在使用 mongoose 为节点创建护照身份验证。我的数据库中没有任何名为“用户”的集合。但是在使用如下架构创建新用户时

var mongoose = require('mongoose');

 module.exports = mongoose.model('User',{
id: String,
username: String,
password: String,
email: String,
firstName: String,
lastName: String
});

它会自动创建新的“用户”集合。 这怎么可能?

【问题讨论】:

    标签: mongodb collections mongoose schema


    【解决方案1】:

    这里 mongoose 将检查 MongoDB 中是否存在名为 "Users" 的集合,如果不存在则创建它。原因是,猫鼬将 's' 附加到指定的模型名称。在这种情况下 'User' 并最终创建一个名为 'Users' 的新集合。如果您已将模型名称指定为 'Person',那么如果不存在同名的集合,它将最终创建一个名为 'Persons' 的集合。

    【讨论】:

    • 但是我们怎样才能限制这种自动创建集合。因为不想要。
    • 猫鼬就是这样工作的,你不能限制它。参考这个链接:mongoosejs.com/docs/guide.html
    • 改用 Spring Data。因为:广泛的文档和庞大的开发者社区。​​span>
    • 来自@vmr 上面发布的“指南”链接:“选项:集合——默认情况下,Mongoose 通过将模型名称传递给 utils.toCollectionName 方法来生成集合名称。此方法将名称复数. 如果您的收藏需要不同的名称,请设置此选项。"
    【解决方案2】:

    Mongoose 将模型名称复数,并默认将其用作集合名称。如果您不想要默认行为,您可以提供自己的名称:

    const UserModel = mongoose.model('User', new Schema({ ... }, { collection: 'User' }));
    

    参考:https://mongoosejs.com/docs/guide.html#collection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多