7

私は、mongoのWebサイトにあるほとんどのmongodbスキーマ設計記事と、SOに関するほとんどの質問に目を通しました。私が理解していないユースケースがまだ1つあります。これらのチュートリアルを見ると、通常、記事のコメントの問題と製品/カテゴリの問題が参照されます。投稿のリストを照会するときに、1 対多の関係 (作成者から投稿) をモデル化する方法を理解したいと考えています。スキーマの例を次に示します。

Users: {
    _id: ObjectID
    Name: String
    Email: String
}

Posts: {
    _id: ObjectID
    user_id: ObjectID
    body: String
    comments: [
        body: String
    ]
}

ここで、最新の 10 件の投稿に対してクエリを実行するとします。非常に単純なクエリですが、投稿ごとにユーザーを指す一意の ObjectID を持つ可能性がある投稿ができました。さて、投稿の各ユーザーの名前と電子メールを取得するにはどうすればよいでしょうか。

  1. 投稿クエリからユーザー ObjectID の配列を作成し、クエリ db.users.find({ _id: {$in: PostsUserIDArray}}); を実行する必要があります。その後、アプリケーション ロジックを使用して、適切なユーザー情報を正しい投稿に一致させますか?

  2. 投稿のデータのコピーを保持する必要があります。IE は、ユーザー ID、名前、および電子メールを posts テーブルに保持します。次に、ユーザーがこの情報を更新して投稿内のすべての情報を更新するときにフックを用意します。

  3. 私や私の友人が思いもよらなかったオプション。

mongo データ モデリングに頭を悩ませようとしているので、すべての助けに感謝します。

4

1 に答える 1

2

私が見た MongoDB の作成者によるいくつかのビデオで、彼らは 2 番目の解決策を提唱しています。ユーザーが名前と電子メール以外のデータを持っていて、投稿を表示するときに名前と電子メールのみを表示する場合は、投稿に保存することは悪くありません。したがって、投稿のクエリを実行するときに他のクエリを実行する必要はありません。また、ユーザーは通常、毎日自分の名前を変更するわけではないため、名前を変更したら、投稿を表示するときに他のクエリを実行して情報を取得するよりも、すべての投稿に対して更新を実行する方が効果的です。

編集 : ビデオへのリンクhttp://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/

于 2011-08-07T19:33:03.420 に答える