Mongodb 如何计算嵌套数组中出现的值?

Mongodb 如何计算嵌套数组中出现的值?,mongodb,Mongodb,我已经找过了,但找不到我问题的答案。我需要计算“nationalCode”字段的出现次数。我在MongoDB中有一个具有此示例结构的集合: { "_id" : ObjectId("5d7519cc6c17d65d4983f048"), "origin" : "Base1", "topic" : [ { "nationalTopic" : { "nationalCode" : 26

我已经找过了,但找不到我问题的答案。我需要计算“nationalCode”字段的出现次数。我在MongoDB中有一个具有此示例结构的集合:

{
    "_id" : ObjectId("5d7519cc6c17d65d4983f048"),
   "origin" : "Base1",
    "topic" : [ 
        {
            "nationalTopic" : {
                "nationalCode" : 26
            },
            "dateTime" : NumberLong(20120927000000)
        }, 
        {
            "nationalTopic" : {
                "nationalCode" : 132
            },
            "dateTime" : NumberLong(20120927000000)
        }, 
        {
            "nationalTopic" : {
                "nationalCode" : 26
            },
            "dateTime" : NumberLong(20120927000000)
        }, 
        {
            "nationalTopic" : {
                "nationalCode" : 26
            },
            "dateTime" : NumberLong(20121005000000)
        }

    ]
}
我使用了以下代码(我尝试了它的许多变体,但都没有得到正确的结果):

我期待着这样的事情:

{
    "_id" : {
        "nationalCode" : 26,
        "count" : 3.0
    }
}

/* 2 */
{
    "_id" : {
        "nationalCode" : 132,
        "count" : 1.0
    }
}

您应该从_id中提取count元素

下面的问题对我有用

db.data.aggregate( 
  [
     { "$unwind": "$topic" },
     {"$match": {"origin": "Base1"}},
     {"$group": { _id: { "nationalCode": "$topic.nationalTopic.nationalCode" },
         "count": {$sum: 1} }
     }
  ]
)

只需使用
$project
更改格式即可

像这样做

MongoDB Enterprise >
 db.ggg.aggregate(
[
{$unwind:"$topic"},
{"$match": {"origin": "Base1"}},
{"$group": { "_id": { nationalCode: "$topic.nationalTopic.nationalCode"}, 
 "count": { "$sum": 1 } }},
{$project :{"_id.nationalCode":1,"_id.count":"$count"}}
]
)
结果在这里

{ "_id" : { "nationalCode" : 26, "count" : 3 } }
{ "_id" : { "nationalCode" : 132, "count" : 1 } }
{ "_id" : { "nationalCode" : 26, "count" : 3 } }
{ "_id" : { "nationalCode" : 132, "count" : 1 } }