【问题标题】:Is there a way to prevent MongoDB adding plural form to collection names?有没有办法防止 MongoDB 向集合名称添加复数形式?
【发布时间】:2014-04-18 23:01:48
【问题描述】:

在我想创建一个名为“Mice”的集合之前,一切正常。老鼠和老鼠都是不可接受的。如果有一个选项可以在配置中设置它会很好。 评论:感谢您的建议,我正在使用 Mongoose。

【问题讨论】:

  • 什么意思? MongoDB 在哪里执行此操作?我从来不知道这个功能
  • 也许您可以指定您正在使用的 ODM,因为它是添加复数名称的那个。通常会有办法解决这个问题。

标签: mongodb mongoose


【解决方案1】:

如果您将模型命名为“mouse”,Mongoose 实际上会将集合名称正确复数为“mice”(请参阅​​source code)。

但您也可以在创建模型时明确命名您的集合,方法是将其作为第三个参数传递给model

var Mice = mongoose.model('Mice', MouseSchema, 'Mice');

【讨论】:

    【解决方案2】:

    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 = '演员' var M = mongoose.model('Actor', schema, collectionName);

    有关更多信息,请查看此链接: http://mongoosejs.com/docs/api.html#index_Mongoose-model

    【讨论】:

      【解决方案3】:

      这里是代码,如何理解猫鼬如何产生复数形式

      function pluralize(str) {
        var found;
        str = str.toLowerCase();
        if (!~uncountables.indexOf(str)) {
          found = rules.filter(function(rule) {
            return str.match(rule[0]);
          });
          if (found[0]) {
            return str.replace(found[0][0], found[0][1]);
          }
        }
        return str;
      }
      

      参考链接:https://github.com/vkarpov15/mongoose-legacy-pluralize/blob/master/index.js

      【讨论】:

        猜你喜欢
        • 2017-01-17
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 2021-03-24
        • 2016-10-17
        • 1970-01-01
        • 2019-02-15
        相关资源
        最近更新 更多