首页 > 解决方案 > 从分组的行中获取字段数

问题描述

数据:

[
  { 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 }]

尝试使用多个组运算符进行分组,但它没有按预期工作。

标签: mongodbgroup-bycountaggregation-frameworkaggregation

解决方案


您可以使用$cond并直接引用cta字段,因为它是布尔值:

db.collection.aggregate([
    {
        $group: {
            _id: { hour: { $hour: "$created_at" } },
            count: { $sum: 1 },
            ctaCount: { $sum: { $cond: [ "$cta", 1, 0 ] } }
        }
    }
])

蒙戈游乐场


推荐阅读