如何使用聚合框架计算MongoDB中的布尔值

时间:2013-06-19 15:56:32

标签: mongodb aggregation-framework

文档存储有以下字段:

_id:
NumberofChildren: Integer
OwnsAHome: Boolean
Income: Integer

我需要使用聚合框架按子节点数排序,所以输出是这样的:

Number of Children: 3
Number of People: some value, say 17
Number of People who own a home: some value less than 17 which is a sum of the number of true Booleans
Average income: some value

我如何在带聚合的MongoDB 中执行此操作,尤其是在计算Boolean OwnsAHometrue的次数方面?

谢谢!

2 个答案:

答案 0 :(得分:15)

$project阶段是您管道中的朋友,允许您创建具有与原始字段不同的类型和值的新字段。

考虑这个投影,当某些事情为真时使用$cond使用一个值,而当它为假时使用另一个值:

{$ project:{numWhoOwnHome:{$ cond:[“$ OwnsAHome”,1,0]}}}

如果您现在使用$group进行{$sum : "$numWhoOwnHome"},那么您的结果将是将OwnsAHome设置为true的人数。

答案 1 :(得分:5)

我使用$cond跟踪@eri建议。

鉴于数据:

campaign | flags.click | flags.removed
c1       | true        | false
c1       | true        | true
c2       | false       | false

使用:

Contact.aggregate(
    [
        {
            $group: {
                _id: "$campaign",
                countClick: {
                    $sum: { $cond: ["$flags.click", 1, 0] }
                },
                countRemoved: {
                    $sum: { $cond: ["$flags.removed", 1, 0] }
                },
            }
        }
    ]
).exec();

我会得到输出:

campaign | countClick | countRemoved
c1       | 2          | 1
c2       | 0          | 0