2011-09-20 23 views
83

Bir veritabanı ve bir koleksiyon oluşturmak için mongoose kullanmaya çalışıyorum. Benim kodum:Mongoose - Zorlama koleksiyonu adı

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

Bu kodu çalıştırdığımda, mongoose usererinfo yerine UserInfo adlı koleksiyonu oluşturdu. Koleksiyon adı mongoose'a nasıl zorlanır?

cevap

135

Bu

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

için iletin. İşte ilgili link: http://mongoosejs.com/docs/guide.html#collection –

+0

Teşekkür @JonPage, Neden benim kişi nesneleri koleksiyonumun insanlar olarak adlandırılmış olduğunu merak ediyordum. Sağladığınız bağlantı, iyi bir referanstır. Bir şema oluştururken özel bir koleksiyon adı ayarlama yönteminin, modeli oluştururken bir koleksiyon adını tanımlamanın diğer yönteminden daha iyi olduğunu düşünüyorum. – Bharat

54

Eğer mongoose 2.0.0 kullanıyorsanız, üçüncü argüman Sen şemada toplama adını ayarlamak gerekir

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

ayrıca mongoose için çalıştı 4.7.6 –

8

olarak collectionName geçmesi yapmalıdır. mongoose.model ait

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

API yapısı şudur:

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

hiçbir tahsilat argüman geçirildiğinde, Gelincik model adını pluralizing tarafından bir koleksiyon adı üretir, yani ne firavun faresi yapmak. Bu davranışı sevmezseniz, bir koleksiyon adı geçirin veya şema koleksiyonu adınızı ayarlayın.

Örnek:

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

veya

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

veya

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

firavunfaresi varsayılan olarak toplama adına 's' katacak. Bunu önlemek istiyorsanız, koleksiyonun adı olarak üçüncü bağımsız değişkeni yalnızca

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

Bu en iyi öneridir. Her zaman koleksiyon adını mongoose.model() içinde geçirmenin en kolayını buldum. Ayrıca mongoose'un koleksiyon adını çoğalttığını belirtmek için de iyi, ilk başladığımda kafa karıştırıcıydı. –