2012-05-12 3 views
1

は私がMongoDBは複合キーの概念をサポートしていますか?

var User = new db.Schema({ 
    username : {type: String, unique: true} 
    , password : String 
    , email: String 
    , friends: [?] 
}); 

を次のようにスキーマを変更するだけではなく、私はと思っていたObjectIdを保存すると思っていたユーザ持つ友人に対応するために

var User = new db.Schema({ 
    username : {type: String, unique: true} 
    , password : String 
    , email: String 
}); 

以下のようなユーザのスキーマを持っていると仮定しますより高速な照会のためにデータベースを非正規化する。今は、友人の配列にObjectIdとユーザー名を格納したいとします。

friends: [{String, String}] 

ここで、2つの文字列はObjectIdとユーザー名を表しますか?私は新しいObjectIdを必要としないので、新しいスキーマを作成したくありません。

答えて

3

確かに、あなたはこれを行うことができますが、私は本当にアドバイスなどの分野を、名前を付けます(モンゴシェルの構文は、中):

user = { 
    '_id' : ObjectId(....), 
    'username' : 'derick', 
    'password' : 'notmypw', 
    'email' : '[email protected]', 
    'friends' : [ 
     { 'id': ObjectId(....), 'username' : 'adam' }, 
     { 'id': ObjectId(....), 'username' : 'ross' }, 
    ] 
}; 

しかし、あなたは(もちろん)のObjectIdを保存する必要はありませんあなたのusernameは既にユニークです。ヘック、あなたも_idフィールドのIDとしてユーザーのユーザー名を作ることができる:

user = { 
    '_id' : 'derick', 
    'password' : 'notmypw', 
    'email' : '[email protected]', 
    'friends' : [ 
     { 'username' : 'adam' }, 
     { 'username' : 'ross' }, 
    ] 
}; 

私はマングースに考えて、あなたは(http://mongoosejs.com/docs/model-definition.htmlで「文書内の文書の定義」を読んでから)のようにこれを行う必要があるでしょう

var Friend = new db.Schema({ 
    username : String 
}); 

var User = new db.Schema({ 
    username : {type: String, unique: true} 
    , password : String 
    , email: String 
    , friends: [Friend] 
}); 
+0

この構文がどのようにMongoose.jsに変換されているか知っていただきありがとうございますか?私はいくつかの組み合わせを試しましたが、何も動作しません。ドキュメントがこのケースを処理するようには見えないhttp://mongoosejs.com/docs/model-definition.html – deltanovember

+0

が私の答えに追加されました – Derick

関連する問題