gpt4 book ai didi

mongodb - 按集合中 bool 值的计数分组

转载 作者:可可西里 更新时间:2023-11-01 09:58:45 26 4
gpt4 key购买 nike

如果我有以下数据:

[{
flagOne: true,
flagTwo: true
},
{
flagOne: true,
flagTwo: false
},
{
flagOne: true,
flagTwo: false
},
{
flagOne: true,
flagTwo: true,
flagThree: true
}]

请注意,该标志可能未设置,应被视为 false。

我如何获得类似这样的聚合结果?

{
flagOne: 4,
flagTwo: 2,
flagThree: 1
}

基本上,我想知道我的集合中按每个 bool 标志分组的文档数量。

最佳答案

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}}
])

输出:

{
"flagOne" : 4,
"flagTwo" : 2,
"flagThree" : 1
}

如果你完全确定所有标志只能有 bool 值,你可以将查询简化为

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}}
])

关于mongodb - 按集合中 bool 值的计数分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com