2011-09-20 11 views
83

mongooseを使用してデータベースとコレクションを作成しようとしています。私のコードは次のとおりです。Mongoose - 強制コレクション名

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

私はこのコードを実行すると、マングース作成されたコレクションの代わりのuserinfoののUserInfoという名前。 mongooseでコレクション名を強制するには?

答えて

135

これは

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

ありがとうございます。関連リンクは次のとおりです。http://mongoosejs.com/docs/guide.html#collection –

+0

ありがとう@JonPage、私のPersonオブジェクトのコレクションが人として名前を付けられたのはなぜかと思いました。あなたが提供したリンクは参考になります。私は、スキーマの作成時にカスタムコレクション名を設定するこの方法は、モデルを作成するときにコレクション名を定義する他の方法よりも優れていると思います。 – Bharat

54

あなたはマングース2.0.0を使用している場合は、第三引数あなたのスキーマでコレクション名を設定する必要が

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

もマングースのために働いた4.7.6 –

8

としてCOLLECTIONNAMEを渡す行う必要があります。 mongoose.modelの

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

APIの構造はこれです:

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

何マングース一切コレクション引数が渡されなかった場合には、マングースは、モデル名を複数形でコレクション名を生成し、ということです。この動作が気に入らない場合は、コレクション名を渡すか、スキーマコレクション名オプションを設定します。

例:

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

または

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

または

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

マングースは、デフォルトでは、コレクション名に 'S' を追加します。それを避けたい場合は、コレクションの名前として3番目の引数を渡します。

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

これは最もよい提案です。私はいつもmongoose.model()にコレクション名を渡すのが最も簡単だと分かっています。また、mongooseがコレクション名を複数形にする方法を指摘するのにも良いです。最初に始めたときに混乱しました。 –