有没有办法防止 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 向集合名称添加复数形式?的主要内容,如果未能解决你的问题,请参考以下文章