【发布时间】:2020-04-02 16:10:08
【问题描述】:
我有一个集合 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
}
}
])
【问题讨论】: