MongoDB通过子文档内容过滤整个文档

时间:2017-04-06 12:10:49

标签: mongodb

我有一个带有子文档数组的简单结构:

{
    _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请求检索整个文档的方法?

0 个答案:

没有答案