Reputation: 1119
It all works fine until I want to create a collection named 'Mice' for example. Both Mouses and Mices are unacceptable. Would be good if there is an option to set this in the config. Comments: thanks for the suggestion, I am using Mongoose.
Upvotes: 23
Views: 10786
Reputation: 501
Here is the code, How you can understand how mongoose produce pluralize forms
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;
}
Reference Link: https://github.com/vkarpov15/mongoose-legacy-pluralize/blob/master/index.js
Upvotes: 0
Reputation: 939
API structure of mongoose.model is this: Mongoose#model(name, [schema], [collection], [skipInit])
What mongoose do is that, When no collection argument is passed, Mongoose produces a collection name by pluralizing the model name. If you don't like this behavior, either pass a collection name or set your schemas collection name option.
Example
var schema = new Schema({ name: String }, { collection: 'actor' });
// or
schema.set('collection', 'actor');
// or
var collectionName = 'actor' var M = mongoose.model('Actor', schema, collectionName);
For more information check this link: http://mongoosejs.com/docs/api.html#index_Mongoose-model
Upvotes: 5
Reputation: 311855
If you name your model 'mouse', Mongoose will actually pluralize the collection name correctly to 'mice' (see source code).
But you can also explicitly name your collection when creating a model by passing it as the third parameter to model
:
var Mice = mongoose.model('Mice', MouseSchema, 'Mice');
Upvotes: 68