2011-09-20 12 views
83

Sto cercando di utilizzare mangusta per creare un database e una raccolta al suo interno. Il mio codice è:Mongoose - Nome raccolta forza

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

Quando si esegue questo codice, la raccolta di mangusta creato ha creato UserInfo invece di userinfo. Come forzare il nome della collezione in mangusta?

risposta

135

Questo dovrebbe farlo

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

Grazie per questo. Ecco il link pertinente: http://mongoosejs.com/docs/guide.html#collection –

+0

Grazie a @JonPage, mi chiedevo perché la mia collezione di oggetti Person fosse nominata come persone. Il link che hai fornito è un buon riferimento. Penso che questo metodo di impostazione di un nome di raccolta personalizzato durante la creazione di uno schema sia migliore dell'altro metodo di definizione del nome di una raccolta durante la creazione del modello. – Bharat

54

Se si utilizza mangusta 2.0.0, passare il collectionName come terzo argomento

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

ha funzionato anche con Mangusta 4.7.6 –

8

È necessario impostare il nome della raccolta nello schema.

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

struttura API di mongoose.model è questo:

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

Cosa mangusta fare è che, quando viene passato nessun argomento collezione, Mangusta produce un nome di raccolta da pluralizzare il nome del modello. Se non ti piace questo comportamento, passa il nome di una collezione o imposta l'opzione per il nome della collezione di schemi.

Esempio:

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

mangusta aggiungerà 's' a nome della collezione per impostazione predefinita. Se si vuole evitare che basta passare il terzo argomento come nome della collezione

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

Questo è il miglior suggerimento. Ho sempre trovato il modo più semplice per passare semplicemente il nome della raccolta in mongoose.model(). Ottimo anche per sottolineare come la mangusta pluralizza il nome della collezione, che è stata fonte di confusione quando ho iniziato. –