首页 > 解决方案 > 如何计算嵌套数组中值的出现次数?

问题描述

我已经搜索但找不到我的问题的答案。我需要计算“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)
        }

    ]
}

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

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

  ]
)

我期待这样的事情:

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

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

标签: mongodb

解决方案


您应该从 _id 中提取 count 元素。

以下查询对我有用。

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

推荐阅读