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.

9voto

vkarpov15 Points 868

Le mainteneur de Mongoose ici. Nous recommandons de faire mongoose.model('UserInfo', UserInfo, 'UserInfo'); , troisième arg à mongoose.model() est le nom de la collection. Voici les documents pertinents .

3voto

Bijay Pal Points 141

Réponse :

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 [schema] nom du schéma
  • 3ème paramètre [collection] nom de la collection (facultatif, induit du nom du modèle)
  • 4eme paramètre [skipInit] si l'initialisation doit être ignorée (par défaut à false)

3voto

Topher Chapman Points 31

Le passage d'un troisième argument sur module.exports = mongoose.model('name', schema, 'collection') remplace le nom automatique de la collection basé sur le nom du modèle, ce qui a déjà été répondu mais il y a 2 autres façons,

par lien doco mongoose.model : https://mongoosejs.com/docs/api.html#mongoose_Mongoose-model

il existe 3 méthodes pour saisir manuellement un nom de collection :

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

// or

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

// or

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)

0voto

Le nom de votre modèle : userInfo.js

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

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