web-dev-qa-db-fra.com

Pourquoi la mangouste ajoute-t-elle toujours un s à la fin du nom de ma collection

Par exemple, ce code entraîne la création d'une collection appelée "données"

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

Et ce code entraîne la création d'une collection appelée "utilisateurs"

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

Merci

102
Bob Ren

Mongoose essaie d'être intelligent. Vous pouvez cependant le forcer à être ce que vous voulez:

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

167
aaronheckmann

La structure de l'API de mongoose.model est la suivante:

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

Ce que fait la mangouste, c'est que, quand aucun argument de collection n'est passé, Mongoose produit un nom de collection en pluralisant le nom du modèle. Si vous n'aimez pas ce comportement, passez un nom de collection ou définissez l'option de nom de collection de schémas.

Exemple:

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

ou

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

ou

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

À partir de mongoose 5.x, vous pouvez le désactiver complètement:

mongoose.pluralize(null);
9
Andrey Hohutkin

Vous pouvez simplement ajouter une chaîne comme troisième argument pour définir le nom réel de la collection. Étendre vos exemples, pour conserver les noms comme data et user respectivement:

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

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

Vous pouvez ajouter le nom de la collection comme troisième paramètre. Voir l'exemple en utilisant 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
sebu
//Mongoose's definition file. NOT your model files
1 const mongoose = require("mongoose");
2 mongoose.pluralize(null);

L'ajout de la lignemongoose.pluralize(null) dans votre fichier Mongoose empêchera la pluralisation du nom de la collection. Vous n'avez pas besoin d'ajouter cette ligne à vos fichiers de modèle.

Comme vu ici .

0
Daniel Segura