如果我有一个看起来像这样的架构:
var person = new Schema({
active: {type: Boolean},
otherSetting: {type: Boolean}
});
是否只有一个查询就能获得所有人员的总数,活动人员总数,非活动人员总数以及otherSetting设置为true且other Setting设置为false的人员的总数?是否必须将otherSetting和active分为两个查询?
我一直在研究这个问题的聚合框架,尽管这似乎是一个简单的问题,但我似乎无法仅凭一个查询就可以做到这一点。
可能吗?谢谢你的帮助。
该聚合框架具有逻辑运算符,如$cond
能很好的与你在这里布尔conition:
db.collection.aggregate([
{ "$group": {
"_id": null,
"active": { "$sum": { "$cond": [ "$active", 1, 0 ] } },
"inActive": { "$sum": { "$cond": [ "$active", 0, 1 ] } },
"total": { "$sum": 1 }
}}
])
该$cond
运算符是“三元”运算符(if / then / else),它允许对逻辑条件进行评估以返回true
(then)或false
(else)值。
“布尔值”的计算方式true/false
与第一个参数相同,该参数$cond
将适当的值传递给该参数$sum
以获取条件总计。
一切都在单个$group
管道阶段中工作,并且具有分组键_id
,null
因为您要累加整个集合。如果将另一个字段的值分组,则将其替换null
为所需的字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句