sql >> データベース >  >> NoSQL >> MongoDB

MongoDB:ユーザーをコメントに埋め込む

    N + 1を回避できます - $in -クエリ。これを考慮してください:

    Post {
      PosterId: ObjectId
      Text: string
      Comments: [ObjectId, ObjectId, ...] // option 1
    }
    
    Comment {
      PostId: ObjectId // option 2 (better)
      Created: dateTime,
      AuthorName: string,
      AuthorId: ObjectId,
      Text: string
    }
    

    これで、 $ inを使用して投稿のコメントを見つけることができます クエリを実行すると、特定の作成者によるすべてのコメントを簡単に見つけることもできます。

    もちろん、コメントを埋め込み配列としてpostに格納し、 $ inを実行することもできます。 コメントを取得するときにユーザー情報を照会します。そうすれば、ユーザー名を非正規化する必要はなく、何百ものクエリも必要ありません。

    ユーザー名を非正規化することを選択した場合、ユーザーが変更されたときにそのユーザーがこれまでに行ったすべてのコメントを更新する必要があります。彼の名前。一方、そのような操作があまり頻繁に行われないのであれば、それは大したことではないはずです。または、要件に応じて、ユーザーがコメントを付けたときに付けた名前を保存する方がよい場合もあります。

    埋め込みに関する一般的な問題は、異なるライターが同じオブジェクトに書き込みます 、したがって、アトミック修飾子 を使用する必要があります ( $ pushなど )。これは、マッパーで使用するのが難しい場合があり(ただし、mongoalchemyはわかりません)、一般的に柔軟性が低くなります。



    1. brewinstallphp56-mongoコマンドが機能しない

    2. AsQueryableメソッドは新しいMongodbC#ドライバー2.0rcで終了しましたか?

    3. 同じタスクが複数回実行された

    4. 仮想属性によるMongoidクエリDB