查找具有特定匹配数组计数的文档

find documents having a specific count of matches array

我到处搜索,但没能找到我要找的东西,如果有人问过,我深表歉意。

考虑以下文件

{
    _id: 1,
    items: [
        {        
            category: "A"
        },
        {        
            category: "A"
        },
        {        
            category: "B"
        },
        {        
            category: "C"
        }]
},
{
    _id: 2,
    items: [
        {        
            category: "A"
        },
        {        
            category: "B"
        }]
},
{
    _id: 3,
    items: [
        {        
            category: "A"
        },
        {        
            category: "A"
        },
        {        
            category: "A"
        }]
}

我希望能够在项目数组中找到超过 1 个类别 "A" 项目的文档。所以这应该找到文档 1 和 3。

这可能吗?

使用aggregation

> db.spam.aggregate([
    {$unwind: "$items"}, 
    {$match: {"items.category" :"A"}}, 
    {$group: {
        _id: "$_id", 
        item: {$push: "$items.category"}, count: {$sum: 1}}
    }, 
    {$match: {count: {$gt: 1}}}
])

输出

{ "_id" : 3, "item" : [ "A", "A", "A" ], "count" : 3 }
{ "_id" : 1, "item" : [ "A", "A" ], "count" : 2 }