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

Например, этот код приводит к созданию коллекции с именем "datas"

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

И этот код приводит к созданию коллекции под названием "пользователи"

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

Спасибо

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

mongoose.pluralize(null);

Ответ 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;

Ответ 6

//Mongoose definition file. NOT your model files
1 const mongoose = require("mongoose");
2 mongoose.pluralize(null);

Добавление строки mongoose.pluralize(null) в ваш файл Mongoose предотвратит плюрализацию имени коллекции. Вам не нужно добавлять эту строку в файлы модели.

Как видно здесь.