У меня есть две коллекции:
Users:
_id | email
ObjectId("5ee493b0989d0f271cdc41c1") | joulie@gmail.com
ObjectId("5ee493b0989d0f271cdc41c3") | newelle@gmail.com
ObjectId("5ee493b0989d0f271cdc41c5") | john@gmail.com
ObjectId("5ee493b0989d0f271cdc41c7") | larry@gmail.com
Members:
group_id | user_id
ObjectId("5ee5e346fae4a21e28a81d91") | ObjectId("5ee493b0989d0f271cdc41c1")
ObjectId("5ee5e346fae4a21e28a81d92") | ObjectId("5ee493b0989d0f271cdc41c5")
Я пытаюсь найти электронную почту в коллекции Users и проверить, принадлежит ли пользователь, связанный с этим электронным письмом, к укажите группу c, сравнив предоставленный параметр group_id с group_id в коллекции Members .
Например, если переданные параметры поиска: email : joul ie, group_id : 5ee5e346fae4a21e28a81d91
Expected Output:
[
{ "email":"joulie@gmail.com",
"member_info": [
{"group_id":"5ee5e346fae4a21e28a81d91", "user_id":"5ee493b0989d0f271cdc41c1"}
]
}
]
Например, если переданные параметры поиска: email : newelle, group_id : 5ee5e346fae4a21e28a81d91
Expected Output:
[
{ "email":"newelle@gmail.com",
"member_info": []
}
]
Надеюсь, вопрос имеет смысл.
Я последовал аналогичному решению из этого первого и второго потоков, но мне кажется, что ни один из них не работает.
Вот то, что я пробовал до сих пор:
db.users.aggregate([
{ "$match" : {email: { $regex: email +'.*'}}},
{
$lookup: {
from: "members",
let: { user_id: "$_id" },
pipeline: [
{ $match: {
$expr: { $and:
[
{ $in: [ group_id, "$group_id" ] },
{ $eq: [ "$$user_id", "$user_id" ] }
]
}
}}
],
as: "members"
}
}
])
Любая помощь или рекомендации будут очень признательны. Заранее спасибо!