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?


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.


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');

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();

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);

11

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

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

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 .


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)

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.