2012-01-03 1 views
0

以下は私のスキーマです。mongoose js:フィールドがリストでないときにドキュメントを埋め込むべきですか?

var UserModel = new Schema({ 
    id: ObjectId 
    , email: String 
    , firstName: String 
    , lastName: String 
    , password: String 
}); 

var MessageModel = new Schema({ 
    id: ObjectId 
    , createdDate: { type: Date, default: Date.now } 
    , user: String // should this be [UserModel]? 
    , body: String 
}); 

私の場合、すべてのメッセージには1人のユーザーしかいません。 UserModelを埋め込む必要がありますか?またはユーザーフィールドを文字列として残す必要があります。 1つの将来的なユースケースは、メッセージの本文、作成日、およびユーザー(姓と名が連結された)を持つ照会を戻すことです。ありがとう。

答えて

1

短い答え:いいえ、UserModelをMessgeModelのサブ文書として使用しないでください。

長い答え:まず、あなたの名前を再考してください。実際にここでスキーマを定義しています。後で、これらのスキーマごとにモデルを関連付けることになります。したがって、ここではUserSchemaとMessageSchemaがより適切でしょう。

しかし、それは密接なことではありません。あなたの質問に関しては、MessageModelスキーマには、1対1の関係がない限り、ユーザーを表す埋め込みドキュメントを含めないでください。しかし、私は各ユーザーが多くのメッセージに関連付けられていることを期待しています(うまくいけば)。したがって、彼が作成したすべてのメッセージに対して、ユーザーの新しいコピー(新しいものはそれぞれ_id)を必要としません。あなたは、各ユーザのための1つの標準的な文書と、MessageModelにおけるそのユーザへの参照だけを必要とします。

ここで、文字列リファレンスを使用することが適切な選択肢になります。しかし、user属性に実際のUserModelドキュメントが取り込まれるようにするMessageModelでクエリを実行する場合は、refを使用することをお勧めします。

+0

回答ありがとうございます。 –

関連する問題