@AnthonyWinzletによって投稿された回答には、ユーザーコレクション内のすべてのドキュメントを調べて、$lookup
を実行する必要があるという欠点があります。 sこれは比較的コストがかかります。したがって、Users
のサイズによって異なります コレクションこれを行う方が速いかもしれません:
-
users.pet
にインデックスを付ける およびusers.car
:db.users.createIndex({pet: 1, car: 1})
-
cars.model
にインデックスを付けます :db.cars.createIndex({model: 1})
-
pets.name
にインデックスを付ける :db.pets.createIndex({name: 1})
次に、これを簡単に行うことができます:
- 一致するすべての
"Tesla"
のリストを取得します 車:db.cars.find({model: "Tesla"})
- 一致するすべての
"Mickey"
のリストを取得します ペット:db.pets.find({name: "Mickey"})
- 関心のあるユーザーを検索します:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
これは非常に読みやすく、理解しやすいだけでなく、3つのクエリすべてがインデックスで完全にカバーされているため、可能な限り高速であることが期待できます。