jfe*_*g92 12 mongodb aggregation-framework
文档存储有以下字段:
_id:
NumberofChildren: Integer
OwnsAHome: Boolean
Income: Integer
Run Code Online (Sandbox Code Playgroud)
我需要使用聚合框架按子节点数排序,所以输出是这样的:
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
Run Code Online (Sandbox Code Playgroud)
我会怎么做这与聚集的MongoDB,特别是关于计数的次数多少Boolean OwnsAHome,是true?
谢谢!
Asy*_*sky 16
$project通过允许您创建具有与原始字段不同的类型和值的新字段,该阶段是您在管道中的朋友.
考虑这个投影,$cond当某些事情为真时使用一个值,而当它为假时使用另一个值:
{$ project:{numWhoOwnHome:{$ cond:["$ OwnsAHome",1,0]}}}
如果您现在$group使用{$sum : "$numWhoOwnHome"}您的结果将是OwnsAHome设置为true的人数.
我遵循@eri建议使用$cond。
给定数据:
campaign | flags.click | flags.removed
c1 | true | false
c1 | true | true
c2 | false | false
Run Code Online (Sandbox Code Playgroud)
与:
Contact.aggregate(
[
{
$group: {
_id: "$campaign",
countClick: {
$sum: { $cond: ["$flags.click", 1, 0] }
},
countRemoved: {
$sum: { $cond: ["$flags.removed", 1, 0] }
},
}
}
]
).exec();
Run Code Online (Sandbox Code Playgroud)
我将得到输出:
campaign | countClick | countRemoved
c1 | 2 | 1
c2 | 0 | 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5446 次 |
| 最近记录: |