2011-09-20 27 views
83

Estoy intentando usar mangosta para crear una base de datos y una colección en ella. Mi código es:Mongoose - Nombre de la colección Force

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 ejecuta este código, la recogida de información del usuario llamado mangosta creado en lugar de userinfo. Cómo forzar el nombre de la colección en mangosta?

Respuesta

135

Esto debe hacerlo

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

Gracias por esto. Aquí está el enlace relevante: http://mongoosejs.com/docs/guide.html#collection –

+0

Gracias a @JonPage, me preguntaba por qué mi colección de objetos Persona fue nombrada como 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

54

Si está utilizando mangosta 2.0.0, pasar el collectionName como tercer argumento

mongoose.model('UserInfo', UserInfo, 'UserInfo'); 
+2

también funcionó para mangosta 4.7.6 –

8

Es necesario configurar el nombre de la colección en su esquema.

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

estructura de la API de mongoose.model es la siguiente:

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

Qué hacer mangosta es que, cuando se pasa ningún argumento colección, Mangosta produce un nombre de colección por pluralizar el nombre del modelo. Si no le gusta este comportamiento, pase un nombre de colección o configure su 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); 
9

mangosta se sumará 's' a nombre de la colección de forma predeterminada. Si desea evitar eso, solo pase el tercer argumento como 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(); 
+0

Esta es la mejor sugerencia. Siempre me ha parecido más fácil pasar el nombre de la colección en mongoose.model(). También es bueno para señalar cómo la mangosta pluraliza el nombre de la colección, eso fue confuso cuando comencé. –

Cuestiones relacionadas