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?


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.


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

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

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

11

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

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


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)

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.