文档存储有以下字段:
_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
的次数方面?
谢谢!
答案 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