web-dev-qa-db-fra.com

Mongoose - Nom de la collection de force

J'essaie d'utiliser Mangouste pour créer une base de données et une collection. 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, Mongoose a créé une collection nommée UserInfo au lieu de userinfo . Comment forcer le nom de la collection en mangouste?

99
ravi

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.

161
Thomas Blobaum

Si vous utilisez mongoose 2.0.0, passez le nom de collection comme troisième argument

mongoose.model('UserInfo', UserInfo, 'UserInfo');
65
Bilal Husain

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();
15
vijay kumar

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

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

Qu'est-ce que mangouste fait est que, quand aucun argument de collection n'est passé, Mongoose produit un nom de collection en pluralisant le nom de 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
Sam

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

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

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

7
vkarpov15

Réponse:

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

Meilleure explication avec la syntaxe:

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

Paramètres Explication:

  • 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 du nom du modèle) 
  • 4ème paramètre [skipInit] s'il faut ignorer l'initialisation (faux par défaut)
1
Bijay Pal

le nom de votre modèle: userInfo.js

dans le fichier de route 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);