Почему мангуста всегда добавляет s в конце названия моей коллекции

Например, этот код приводит к коллекции под названием «данные» создается

<code>var Dataset = mongoose.model('data', dataSchema);
</code>

И этот код приводит к коллекции под названием «пользователи» создается

<code>var User = mongoose.model('user', dataSchema);
</code>

Спасибо

 Sergio Tulentsev11 мая 2012 г., 09:24
Кажется, что логика плюрализма не настолько глупа (или умна, зависит от того, что вы ожидали). Я уверен, что вы можете узнать, как именно это работает (найти источник).
 Bob Ren11 мая 2012 г., 09:21
Да, достаточно интересно, что var Dataset = mongoose.model («данные», dataSchema); В результате получается коллекция данных.
 Luis Sieira03 авг. 2015 г., 17:32
Только для записи. Данные множественного числа, единственное число данных является базовым
 Sergio Tulentsev11 мая 2012 г., 09:19
Это соглашение в Rails. У вас есть объект "пользователь", вы сохраняете его в "пользователи" коллекция. Полагаю, у Мангуста тоже самое.
 user102750311 мая 2012 г., 09:31
@SergioTulentsev, это не рубин, но работает так жеgithub.com/LearnBoost/mongoose/blob/master/lib/utils.js

Ответы на вопрос(5)

Вы можете добавить имя коллекции в качестве третьего параметра. Посмотрите пример с использованием Typescript:

import DataAccess = require('../DataAccess');
import IUser = require("../../Models/Interfaces/IUser");

var mongoose = DataAccess.mongooseInstance;
var mongooseConnection = DataAccess.mongooseConnection;

class UserSchema {
        static get schema () {
        var schema =  mongoose.Schema({
            _id : {
                type: String
            },
            Name: {
                type: String,
                required: true
            },
            Age: {
                type: Number,
                required: true
            }
        });

        return schema;
    }
}
var schema:any = mongooseConnection.model<IUser>("User", 
UserSchema.schema,"User");
export = schema;

Начиная с mongoose 5.x вы можете полностью отключить его:

mongoose.pluralize(null);
 15 мар. 2019 г., 09:46
Лучшее решение, потому что нам не нужно определять как название модели, так и название коллекции.

Структура API mongoose.model такова:

Mongoose#model(name, [schema], [collection], [skipInit])

Мангуста делает то, что, когда аргумент коллекции не передается, Mongoose создает имя коллекции путем умножения имени модели. Если вам не нравится это поведение, либо передайте имя коллекции, либо задайте параметр имени коллекции схем.

Пример:

var schema = new Schema({ name: String }, { collection: 'actor' });

или же

schema.set('collection', 'actor');

или же

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);

Вы можете просто добавить строку в качестве третьего аргумента, чтобы определить фактическое имя для коллекции. Расширяя ваши примеры, чтобы сохранить имена какdata а такжеuser соответственно:

var Dataset = mongoose.model('data', dataSchema, 'data');

var User = mongoose.model('user', dataSchema, 'user');
Решение Вопроса

Мангуст пытается быть умным. Однако вы можете заставить его быть тем, что хотите:

var dataSchema = new Schema({..}, { collection: 'data' })

 12 февр. 2013 г., 09:22
Я не понимаю, как добавить "s" делает структуру более умной, ИМХО, это плохая идея. Помимо этого мангуст - потрясающая основа.
 03 апр. 2016 г., 03:09
он не просто добавляет "s"; но это делает правильное множественное число имени. Попробуйте для случаев с «мышью», вы получите коллекцию под названием «мыши». или с «лицом» вы 'получите' людей '. Это сводило меня с ума, чтобы понять, откуда эти имена пришли :-)
 06 июл. 2016 г., 06:55
Жаль, что я не прочитал бы документы или не погуглил бы, потратил почти 6 часов на этот вопрос.
 15 мар. 2016 г., 14:47
Что за глупый дизайн. Два старших разработчика просто потеряли 4 часа
 12 февр. 2013 г., 17:10
это старый плохой выбор, который нарушает обратную совместимость, если его убрать. поэтому мы решили придерживаться его.

Ваш ответ на вопрос