У меня есть коллекция myCollection с массивом членов:
{
name : String,
members: [{status : Number, memberId : {type: Schema.Types.ObjectId, ref: 'members'}]
}
и коллекция членов
{
firstname : String,
lastname : String
}
, и у меня есть эти данные
"_id" : ObjectId("5e83791eb49ab07a48e0282b")
"members" : [
{
"status" : 1,
"_id" : ObjectId("5e83791eb49ab07a48e0282c"),
"memberId" : ObjectId("5e7dbf5b257e6b18a62f2da9")
},
{
"status" : 2,
"_id" : ObjectId("5e837944b49ab07a48e0282d"),
"memberId" : ObjectId("5e7de2dbe027f43adf678db8")
}
],
Я хочу выбрать только членов статуса 1 и выполнить поиск для получения данных членов, я пробовал это, но он возвращает статус всех участников (1 и 2), как я могу сделать запрос, спасибо.
db.getCollection('myCollection').aggregate([
{$match: {_id: ObjectId("5e83791eb49ab07a48e0282b")}},
{ "$lookup": {
"from": "members",
"let": { "ar": "$members.memberId" , "ar2": "$members.status" },
"pipeline": [
{ "$match": {
"$expr": {
"$cond": [
{ "$in": ["$_id", "$$ar"] },
{},
{ "$eq": [1, "$$ar2"] },
]
}
}}
],
"as": "Member"
}},
{ $project: {
"Member._id" : 1,
"Member.firstname" : 1,
"Member.lastname" : 1
}
}
])