136 votes

Mongoose -- Forcer le nom de la collection

J'essaie d'utiliser Mongoose pour créer une base de données et une collection dans celle-ci. Mon code est le suivant :

var mongoose = require('mongoose');
    var db = mongoose.connect('mongodb://localhost/testdb');
    var Schema = mongoose.Schema;

    var UserInfo = new Schema({
    username : String,
    password : String 
    });

    mongoose.model('UserInfo', UserInfo);

    var user = db.model('UserInfo');

    var admin = new user();
    admin.username = "sss";
    admin.password = "ee";
    admin.save();

Lorsque j'exécute ce code, mongoose crée une collection nommée UserInfo au lieu de userinfo. Comment forcer le nom de la collection dans Mongoose ?

21 votes

Fait amusant : la mangouste sait que le pluriel de bœuf est bœuf, mais pas que le pluriel d'oie est oie.

222voto

Thomas Blobaum Points 1097

Cela devrait le faire

var UserInfo = new Schema({
  username : String,
  password : String 
}, { collection: 'userinfo' });

Voir ce lien de la documentation de Mongoose pour plus d'informations.

7 votes

Merci pour cela. Voici le lien correspondant : mongoosejs.com/docs/guide.html#collection

2 votes

Merci @JonPage, je me demandais pourquoi ma collection d'objets Personne était nommée comme des personnes. Le lien que vous avez fourni est une bonne référence. Je pense que cette méthode consistant à définir un nom de collection personnalisé lors de la création d'un schéma est meilleure que l'autre méthode consistant à définir un nom de collection lors de la création du modèle.

0 votes

C'était très utile. J'ai passé deux jours à essayer d'interroger quelque chose maintenant.

91voto

Bilal Husain Points 627

Si vous utilisez mongoose 2.0.0, passez le collectionName comme troisième argument.

mongoose.model('UserInfo', UserInfo, 'UserInfo');

1 votes

Une façon parfaite de déclarer un nom de collection personnalisé au niveau du modèle.

1 votes

Cette réponse ne dit pas si cela fonctionne encore jusqu'à la 2.0.0 ou si cela a été implémenté depuis la 2.0.0.

29voto

vijay kumar Points 487

Mongoose ajoutera 's' au nom de la collection par défaut. Si vous voulez éviter cela, passez simplement comme troisième argument le nom de la collection :

var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/testdb');
var Schema = mongoose.Schema;

var UserInfo = new Schema({
    username: String,
    password: String 
});

mongoose.model('UserInfo', UserInfo, 'UserInfo')

tan = new user();
admin.username = 'sss';
admin.password = 'ee';
admin.save();

16voto

Sam Points 751

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

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

Ce que Mongoose fait, c'est que, lorsqu'aucun argument de collection n'est passé, Mongoose produit un nom de collection en mettant le nom du modèle au pluriel. Si vous n'aimez pas ce comportement, passez un nom de collection ou définissez l'option de nom de collection de vos 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);

11voto

James Freund Points 312

Vous devez définir le nom de la collection dans votre schéma.

new Schema({...},{collection: 'userInfo'});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X