MongoDB で SQL Join と同等のものを実行するにはどうすればいいですか? 質問する

MongoDB で SQL Join と同等のものを実行するにはどうすればいいですか? 質問する

MongoDB で SQL Join と同等のものを実行するにはどうすればよいですか?

たとえば、2 つのコレクション (ユーザーとコメント) があり、pid=444それぞれのユーザー情報とともにすべてのコメントを取得したいとします。

comments
  { uid:12345, pid:444, comment="blah" }
  { uid:12345, pid:888, comment="asdf" }
  { uid:99999, pid:444, comment="qwer" }

users
  { uid:12345, name:"john" }
  { uid:99999, name:"mia"  }

特定のフィールド (例: ) を持つすべてのコメント...find({pid:444}と、各コメントに関連付けられたユーザー情報を一度に取得する方法はありますか?

現時点では、まず基準に一致するコメントを取得し、その結果セット内のすべての uid を把握し、ユーザー オブジェクトを取得して、コメントの結果とマージしています。やり方が間違っているようです。

ベストアンサー1

Mongo 3.2 では、この質問に対する答えはほとんど正しくありません。$lookup集計パイプラインに追加された新しい演算子は、基本的に左外部結合と同じです。

https://docs.mongodb.org/master/reference/operator/aggregation/lookup/#pipe._S_lookup

ドキュメントより:

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

もちろん、Mongo はリレーショナル データベースではありません$lookup。開発者は、特定の使用例を慎重に推奨していますが、少なくとも 3.2 以降では、MongoDB で結合を実行できるようになりました。

おすすめ記事