有没有办法防止 MongoDB 向集合名称添加复数形式?

Posted

技术标签:

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

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

【问题讨论】:

什么意思? MongoDB 在哪里执行此操作?我从来不知道这个功能 也许您可以指定您正在使用的 ODM,因为它是添加复数名称的那个。通常会有办法解决这个问题。 Mongoose -- Force collection name的可能重复 【参考方案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

【讨论】:

以上是关于有没有办法防止 MongoDB 向集合名称添加复数形式?的主要内容,如果未能解决你的问题,请参考以下文章

为啥集合名称总是复数? [复制]

MongoDB常用操作--集合1

如何使用猫鼬防止重复文件mongodb

向 MongoDB 集合中的每个文档添加新字段

无法锁定 mongodb 文档。如果我需要怎么办?

向MongoDB中的现有集合添加具有大量行的新字段