Вопрос по mongodb, mongoose, node.js – Почему мангуста всегда добавляет s в конце названия моей коллекции

94

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

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

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

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

Спасибо

Да, достаточно интересно, что var Dataset = mongoose.model («данные», dataSchema); В результате получается коллекция данных. Bob Ren
Это соглашение в Rails. У вас есть объект "пользователь", вы сохраняете его в "пользователи" коллекция. Полагаю, у Мангуста тоже самое. Sergio Tulentsev
Кажется, что логика плюрализма не настолько глупа (или умна, зависит от того, что вы ожидали). Я уверен, что вы можете узнать, как именно это работает (найти источник). Sergio Tulentsev
@SergioTulentsev, это не рубин, но работает так жеgithub.com/LearnBoost/mongoose/blob/master/lib/utils.js user1027503
Только для записи. Данные множественного числа, единственное число данных является базовым Luis Sieira

Ваш Ответ

5   ответов
1

Вы можете добавить имя коллекции в качестве третьего параметра. Посмотрите пример с использованием 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;
1

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

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

Структура 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);
5

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

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

var User = mongoose.model('user', dataSchema, 'user');
157

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

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

Я не понимаю, как добавить "s" делает структуру более умной, ИМХО, это плохая идея. Помимо этого мангуст - потрясающая основа.
он не просто добавляет "s"; но это делает правильное множественное число имени. Попробуйте для случаев с «мышью», вы получите коллекцию под названием «мыши». или с «лицом» вы 'получите' людей '. Это сводило меня с ума, чтобы понять, откуда эти имена пришли :-)
Жаль, что я не прочитал бы документы или не погуглил бы, потратил почти 6 часов на этот вопрос.
Что за глупый дизайн. Два старших разработчика просто потеряли 4 часа
это старый плохой выбор, который нарушает обратную совместимость, если его убрать. поэтому мы решили придерживаться его.

Похожие вопросы