21

文档存储在以下字段中:

_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 OwnsAHome方面true

谢谢!

4

2 回答 2

19

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

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

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

如果您现在对结果进行 a 操作$group{$sum : "$numWhoOwnHome"}则将 OwnsAHome 设置为 true 的人数。

于 2013-06-19T16:47:23.673 回答
19

我遵循了@eri 的建议,使用$cond.

给定数据:

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
于 2018-02-08T09:54:30.383 回答