我无法理解MongoDB的聚合框架。基本上我的JSON看起来像这样:
[
{
"id": 1,
"param1": true,
"param2": false,
"param3": false
},
{
"id": 2,
"param1": true,
"param2": false,
"param3": true
},
{
"id": 3,
"param1": false,
"param2": true,
"param3": false
}
]
我想计算有多少文档,例如,param1 == true,param2 == true等等。 在这种情况下,预期结果应为:
count_param1: 2
count_param2: 1
count_param3: 1
这里的诀窍是param可以是param1 ... paramN,所以基本上我要么做一个不同的并且确切地指定我感兴趣的字段,或者我可以“分组”所有以“param”开头的字段。
推荐的方法是什么?
进一步解释:
SQL的等价物是:
SELECT COUNT(param1) AS param1
FROM [Table]
GROUP BY param1
对于每一列(但在一个查询中)。
答案 0 :(得分:0)
我不会使用聚合,因为有一个内置帮助器count():
> db.collection.count({ "param1" : true })
您可以创建一个简单的函数,将参数名称作为参数并返回计数:
> param_count = function(param_name) {
count_obj = {}
count_obj[param_name] = true
return db.collection.count(count_obj)
}
虽然技术上可以在一个聚合管道中获取所有参数的计数,但是对于100万个行来说它是不可行的,并且每个参数名称做一个聚合管道会更好。我并不精通SQL,但我猜你什么时候给SQL等价,并且说你在#34;一个查询"你的意思是你发送了一批SQL,但它实际上是不同查询的串联和计数的串联,所以它与我给出的解决方案没什么不同。
如果存在,则计数可以使用paramN
上的索引。
答案 1 :(得分:0)
这已经解决了。 查看我的相关question和chridam的优秀答案。
满足我需求的完美解决方案。