Mongo查询得到总数

时间:2015-07-09 01:06:52

标签: node.js mongodb mongodb-query aggregation-framework

如果我的架构看起来像这样:

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

仅使用一个查询就可以获得所有人的总计数,活跃的总人数,非活动人数以及其他设置设置为true的人的总数其他设置为false? otherSetting和active必须分成两个查询吗?

我一直在讨论这个问题的聚合框架,虽然这看起来像一个简单的问题但我似乎只用一个查询来做。

甚至可能吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

aggregation framework具有$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(然后)或false(else)值。

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

所有内容都在单个$group管道阶段中,_id的分组键null,因为您想要将整个集合相加。如果对另一个字段的值进行分组,则将null替换为您想要的字段。