私は2つのコレクションを持っています。ユーザーとクライアント
Companies
:
{"_id":{"$oid":"599d8864a5304114ac9b8a0a"},"id":"company1","name":"Big Company", "users":["Jack", "Martin"]}
{"_id":{"$oid":"599d8864a5304114ac9b8a0b"},"id":"company2","name":"Super Big Company", "users":["Kate", "Jack"]}
Users
:
{"_id":{"$oid":"59b0178ca5304101c1a99711"},"username":"Jack","hashedPassword":"2f1f147e358f28a74cd29c7f44eedd4ec0293d6c"},
{"_id":{"$oid":"59b0178ca5304101c1a99811"},"username":"Martin","hashedPassword":"1f5f147e358f21a74cd29c7f44eedd4ec0293d6c"}
このユーザーがメンバーであるユーザーUsers
からリストを取得したいユーザー名が1つありますCompanies
。
したがって、フローは次のようになります。
Find all companies which have Jack in the list of their users -> extract and join arrays -> Return the list of User objects with matching username from the array
集計関数と$ lookupを使用して1つのクエリでこれを取得できるはずですが、無残に機能させようとして失敗しました。
db.Clients.aggregate([
{
"$lookup":
{
"from": "Users",
"localField": "users",
"foreignField": "username",
"as": "user_details"
}
},
{"$match": {"users":"Jack"}},
{"$unwind": "$user_details" },
{"$project": {"user_details" :1,"_id":0}}
])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加