Mongoose - Nom de la collection Force

120

J'essaye d'utiliser la mangouste pour créer une base de données et une collection dedans. Mon code est:

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, mangouste a créé une collection nommée UserInfo au lieu de userinfo. Comment forcer le nom de la collection en mangouste?

ravi
la source
14
Fait amusant: la mangouste sait que le pluriel de boeuf est bœuf, mais pas que le pluriel de oie est oie.
Sean Letendre

Réponses:

201

Cela devrait le faire

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

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

Thomas Blobaum
la source
7
Merci pour cela. Voici le lien pertinent: mongoosejs.com/docs/guide.html#collection
Jon Page
2
Merci @JonPage, je me demandais pourquoi ma collection d'objets Person était nommée personnes. Le lien que vous avez fourni est une bonne référence. Je pense que cette méthode de définition d'un nom de collection personnalisé lors de la création d'un schéma est meilleure que l'autre méthode de définition d'un nom de collection lors de la création du modèle.
Bharat
C'était super utile. J'ai passé deux jours à essayer d'interroger quelque chose maintenant.
Holt Mansfield
79

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

mongoose.model('UserInfo', UserInfo, 'UserInfo');
Bilal Husain
la source
Moyen idéal pour déclarer un nom de collection personnalisé au niveau du modèle.
tezqa
25

Mongoose ajoutera des «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();
vijay kumar
la source
1
C'est la meilleure suggestion. J'ai toujours trouvé le plus simple de passer simplement le nom de la collection dans mongoose.model (). Aussi bien pour souligner comment mangouste pluralise le nom de la collection, ce qui était déroutant lorsque j'ai commencé.
John Morrison
14

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

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

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

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

new Schema({...},{collection: 'userInfo'});
James Freund
la source
9

Mainteneur de mangouste ici. Nous vous recommandons de faire mongoose.model('UserInfo', UserInfo, 'UserInfo');, le troisième argument mongoose.model()est le nom de la collection. Voici les documents pertinents .

vkarpov15
la source
1

Répondre:

mongoose.model('UserInfo', UserInfo, 'userinfo'); //3rd parameter 'userinfo': as collection name

Meilleure explication avec la syntaxe:

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

Explication des paramètres:

  • 1er paramètre - nom nom du modèle
  • 2ème paramètre [schéma] nom du schéma
  • 3ème paramètre [collection] nom de la collection (facultatif, induit à partir du nom du modèle)
  • 4ème paramètre [skipInit] s'il faut ignorer l'initialisation (la valeur par défaut est false)
Bijay Pal
la source
0

le nom de votre modèle: userInfo.js

dans un fichier d'itinéraire express ou app.js

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

puis dans votre userInfo.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Shyam Kumar Nallaguntla
la source