【问题标题】:MongoDB aggregation - grouping dataMongoDB 聚合 - 分组数据
【发布时间】:2020-09-23 13:24:21
【问题描述】:

我有包含用户活动数据(活动类型)的 MongoDB 集合,我想将活动分为两组并返回活动计数。

集合看起来像这样(还有一些其他字段,如日期等):

{"userID": 1, "activity": "reading"}
{"userID": 1, "activity": "sleeping"}
{"userID": 1, "activity": "hiking"}
{"userID": 1, "activity": "sleeping"}
{"userID": 1, "activity": "biking"}

我想做聚合,返回分组的多个活动的计数,例如。我想将“徒步旅行”和“骑自行车”归为“娱乐”,将“睡眠”和“阅读”归为“休息”,并且比指定用户自选定日期以来的活动计数:

"recreation": 2
"resting": 3

我所做的是匹配 userIDdate $gte 以获取选定用户和期间的所有活动,尝试计数,$sum$project,但无法使其按预期工作.

谢谢!

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您可以将$group$cond 一起使用

    [
      {
        $group: {
          _id: "$userID",
          recreation: {
            $sum: {
              $cond: [
                {
                  $or: [
                    {$eq: ["$activity","hiking"]},
                    {$eq: ["$activity","biking"]}
                  ]
                },
                1,
                0
              ]
            }
          },
          resting: {
            $sum: {
              $cond: [
                {
                  $or: [
                    {$eq: ["$activity","sleeping"]},
                    {$eq: ["$activity","reading"]}
                  ]
                },
                1,
                0
              ]
            }
          }
        }
      }
    ]
    

    工作Mongo playground

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多