mongodb - 如何计算嵌套数组中值的出现次数?
问题描述
我已经搜索但找不到我的问题的答案。我需要计算“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
}
}
解决方案
您应该从 _id 中提取 count 元素。
以下查询对我有用。
db.data.aggregate(
[
{ "$unwind": "$topic" },
{"$match": {"origin": "Base1"}},
{"$group": { _id: { "nationalCode": "$topic.nationalTopic.nationalCode" },
"count": {$sum: 1} }
}
]
)
推荐阅读
- angular - 如何将数据从 Angular 表单发送到 Spring Boot 微服务
- html - 添加文本时如何阻止网格中的容器扩展?
- c# - EF Core .NET 打包所有层 cqrs 错误
- javascript - 在网页上通过 JavaScript 模拟鼠标滚轮旋转
- php - 如何从主题中删除 woocommerce.css 文件?
- android - 如何在 intelliJ (maven) 中调试/启动 Android 应用程序
- bash - 无法将命令存储到bash中的变量
- neo4j - Neo4j - 大于 11 的可变长度永远运行并且查询永远不会返回
- r - 如何计算 Rstudio 中一组特定行的平均值
- r - 如何在R中隐藏滑块?