Mongoose - Nombre de la colección Force

120

Estoy tratando de usar mongoose para crear una base de datos y una colección en ella. Mi codigo es:

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

Cuando ejecuto este código, mongoose creó una colección llamada UserInfo en lugar de userinfo. ¿Cómo forzar el nombre de la colección en mangosta?

ravi
fuente
14
Dato curioso: mangosta sabe que el plural de buey es bueyes, pero no que el plural de ganso es gansos.
Sean Letendre

Respuestas:

201

Esto debería hacerlo

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

Consulte este enlace de la documentación de Mongoose para obtener más información.

Thomas Blobaum
fuente
7
Gracias por esto. Aquí está el enlace relevante: mongoosejs.com/docs/guide.html#collection
Jon Page
2
Gracias @JonPage, me preguntaba por qué mi colección de objetos Person se llamaba personas. El enlace que proporcionó es una buena referencia. Creo que este método de establecer un nombre de colección personalizado al crear un esquema es mejor que el otro método de definir un nombre de colección al crear el modelo.
Bharat
Esto fue muy útil. Pasé dos días tratando de consultar algo ahora.
Holt Mansfield
79

Si está utilizando mongoose 2.0.0, pase el nombre de la colección como tercer argumento

mongoose.model('UserInfo', UserInfo, 'UserInfo');
Bilal Husain
fuente
Manera perfecta de declarar un nombre de colección personalizado al nivel del modelo.
tezqa
25

Mongoose agregará 's' al nombre de la colección de forma predeterminada. Si desea evitar eso, simplemente pase como tercer argumento el nombre de la colección:

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
fuente
1
Esta es la mejor sugerencia. Siempre me ha resultado más fácil pasar el nombre de la colección en mongoose.model (). También es bueno para señalar cómo mangosta pluraliza el nombre de la colección, que era confuso cuando comencé.
John Morrison
14

La estructura API de mongoose.model es la siguiente:

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

Lo que hace Mangosta es que, cuando no se pasa ningún argumento de colección, Mongoose produce un nombre de colección pluralizando el nombre del modelo. Si no le gusta este comportamiento, pase un nombre de colección o configure la opción de nombre de colección de esquemas.

Ejemplo:

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

o

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

o

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);
Sam
fuente
11

Debe establecer el nombre de la colección en su esquema.

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

Mantenedor de mangosta aquí. Recomendamos hacerlo mongoose.model('UserInfo', UserInfo, 'UserInfo');, el tercer argumento mongoose.model()es el nombre de la colección. Aquí están los documentos relevantes .

vkarpov15
fuente
1

Responder:

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

Mejor explicación con sintaxis:

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

Explicación de los parámetros:

  • 1er parámetro - nombre nombre del modelo
  • Segundo parámetro [esquema] nombre de esquema
  • 3er parámetro [colección] nombre de la colección (opcional, inducido a partir del nombre del modelo)
  • 4to parámetro [skipInit] si se debe omitir la inicialización (por defecto es falso)
Bijay Pal
fuente
0

el nombre de su modelo: userInfo.js

en el archivo de ruta expresa o app.js

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

luego en su 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
fuente