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