从分组行中获取字段数
Obtain count of fields from grouped rows
数据:
[
{ created_at: "2020-05-08T18:46:08.020Z", view: true, cta: false },
{ created_at: "2020-05-08T19:00:00.020Z", view: true, cta: true },
{ created_at: "2020-05-08T19:30:45.020Z", view: true, cta: false },
{ created_at: "2020-05-08T19:55:50.020Z", view: true, cta: true }
]
当我通过 created_at 按小时间隔对数据进行分组时,我得到了唯一 created_at 的计数就好了。
$group: {
$hour: { hour: '$created_at' },
count: { $sum: 1 }
}
结果:
hour: 18, count: 1,
hour: 19, count: 3
现在,当 cta
和 view
字段的值为真时,我如何也包括计数。我想获得如下结果:
[{ hour: 18, ctaCount: 0, viewCount: 1 }],
[{ hour: 19, ctaCount: 2, viewCount: 3 }]
尝试使用多个组运算符进行分组,但没有按预期工作。
您可以使用 $cond 并直接引用 cta
字段,因为它是 bool:
db.collection.aggregate([
{
$group: {
_id: { hour: { $hour: "$created_at" } },
count: { $sum: 1 },
ctaCount: { $sum: { $cond: [ "$cta", 1, 0 ] } }
}
}
])
数据:
[
{ created_at: "2020-05-08T18:46:08.020Z", view: true, cta: false },
{ created_at: "2020-05-08T19:00:00.020Z", view: true, cta: true },
{ created_at: "2020-05-08T19:30:45.020Z", view: true, cta: false },
{ created_at: "2020-05-08T19:55:50.020Z", view: true, cta: true }
]
当我通过 created_at 按小时间隔对数据进行分组时,我得到了唯一 created_at 的计数就好了。
$group: {
$hour: { hour: '$created_at' },
count: { $sum: 1 }
}
结果:
hour: 18, count: 1,
hour: 19, count: 3
现在,当 cta
和 view
字段的值为真时,我如何也包括计数。我想获得如下结果:
[{ hour: 18, ctaCount: 0, viewCount: 1 }],
[{ hour: 19, ctaCount: 2, viewCount: 3 }]
尝试使用多个组运算符进行分组,但没有按预期工作。
您可以使用 $cond 并直接引用 cta
字段,因为它是 bool:
db.collection.aggregate([
{
$group: {
_id: { hour: { $hour: "$created_at" } },
count: { $sum: 1 },
ctaCount: { $sum: { $cond: [ "$cta", 1, 0 ] } }
}
}
])