我有一个带有子文档数组的简单结构:
{
_id: xxxxx,
referenceNumber: 1,
participants: [
{name: 'Alice', role: 'lead'},
{name: 'Bob', role: 'support'}
]
},
{
_id: yyyyy,
referenceNumber: 2,
participants: [
{name: 'Alice', role: 'development'},
{name: 'Bob', role: 'lead'}
]
},
{
_id: zzzz,
referenceNumber: 2,
participants: [
{name: 'Alice', role: 'lead'},
{name: 'Bob', role: 'support'},
{name: 'Charlie', role: 'development'}
]
}
我现在想要所有的条目,其中" Alice"在"领先"作用。
所以期望的结果是:
{
_id: xxxxx,
referenceNumber: 1,
participants: [
{name: 'Alice', role: 'lead'},
{name: 'Bob', role: 'support'}
]
},
{
_id: zzzz,
referenceNumber: 2,
participants: [
{name: 'Alice', role: 'lead'},
{name: 'Bob', role: 'support'},
{name: 'Charlie', role: 'development'}
]
}
我试过find({'patricipants.name': 'Alice', 'participants.role': 'lead'})
,当然会返回所有文件,其中" Alice"存在且某人在"领导"作用。
然后我尝试聚合,放松:
aggregate(
[
{ $unwind: '$participants'},
{ $match: {'participants.name': 'Alice', 'participants.role': 'lead'}}
]
)
然后返回
{
_id: xxxxx,
referenceNumber: 1,
participants: [
{name: 'Alice', role: 'lead'},
]
},
{
_id: zzzz,
referenceNumber: 2,
participants: [
{name: 'Alice', role: 'lead'},
]
}
缺少所有其他participants
,显然这是$unwind
所做的。
有没有办法可以节省我对_ids
中找到的所有aggregate
请求检索整个文档的方法?