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 で結合を実行できるようになりました。