【问题标题】:Obtain count of fields from grouped rows从分组的行中获取字段数
【发布时间】:2020-08-24 10:05:54
【问题描述】:

数据:

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

现在,当字段值为 true 时,我如何还包括 ctaview 字段的计数。我想获得如下结果:

    [{ hour: 18, ctaCount: 0, viewCount: 1 }],
    [{ hour: 19, ctaCount: 2, viewCount: 3 }]

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

【问题讨论】:

    标签: mongodb group-by count aggregation-framework aggregation


    【解决方案1】:

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

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

    Mongo Playground

    【讨论】:

    • 还有一个疑问。如果 cta 字段都在不同的集合中,您将如何做同样的事情? @mick 如果 CTA 字段是字符串怎么办?
    • 不,在这种情况下,您需要先进行 $lookup,然后当您在同一个集合中拥有所有数据时,您可以在 $cond 中指定布尔表达式
    猜你喜欢
    • 2020-04-05
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多