pur*_*nes 2 mongodb mongodb-query aggregation-framework
如果我有以下数据:
[{
flagOne: true,
flagTwo: true
},
{
flagOne: true,
flagTwo: false
},
{
flagOne: true,
flagTwo: false
},
{
flagOne: true,
flagTwo: true,
flagThree: true
}]
Run Code Online (Sandbox Code Playgroud)
请注意,该标志可能未设置,应视为false。
我如何得到这样的汇总结果?
{
flagOne: 4,
flagTwo: 2,
flagThree: 1
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想知道我的集合中按每个布尔标志分组的文档数。
是否flagThree存在或等于都无关紧要"tomato"。仅在具有值的情况下计数标志true:
db.getCollection('so').aggregate([
{
$group: {
_id : 1,
flagOne: {$sum: {$cond: [{$eq:["$flagOne", true]}, 1, 0]}},
flagTwo: {$sum: {$cond: [{$eq:["$flagTwo", true]}, 1, 0]}},
flagThree: {$sum: {$cond: [{$eq:["$flagThree", true]}, 1, 0]}},
}
},
{$project: {_id:0}}
])
Run Code Online (Sandbox Code Playgroud)
输出:
{
"flagOne" : 4,
"flagTwo" : 2,
"flagThree" : 1
}
Run Code Online (Sandbox Code Playgroud)
如果您完全确定所有标志只能包含布尔值,则可以将查询简化为
db.getCollection('so').aggregate([
{
$group: {
_id : 1,
flagOne: {$sum: {$cond: ["$flagOne", 1, 0]}},
flagTwo: {$sum: {$cond: ["$flagTwo", 1, 0]}},
flagThree: {$sum: {$cond: ["$flagThree", 1, 0]}},
}
},
{$project: {_id:0}}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |