Mongo查询获取总数



如果我有一个像这样的模式:

    var person = new Schema({
         active: {type: Boolean},
         otherSetting: {type: Boolean} 
    });

是否可能只使用一个查询来获得所有人的总数,活动的总人数,不活动的总人数,以及otherSetting设置为true和otherSetting设置为false的总人数?otherSetting和active是否必须分成两个查询?

我一直在玩围绕这个问题的聚合框架,虽然这似乎是一个简单的问题,我似乎不能做到只有一个查询。

这可能吗?谢谢你的帮助。

聚合框架有逻辑运算符,如 $cond ,可以很好地处理这里的布尔条件:

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)值。

$cond的第一个参数中,"布尔值"被计算为true/false,该参数将适当的值传递给$sum以获得条件总计。

由于您想要将整个集合加起来,因此所有内容都在单个$group管道阶段中工作,并使用null的分组键_id。如果对另一个字段的值进行分组,则将该null替换为您想要的字段。

相关内容

  • 没有找到相关文章

最新更新