【问题标题】:Mongodb Aggegrate -unwind and then group(Find unique count)Mongodb Aggregate -unwind 然后分组(查找唯一计数)
【发布时间】:2020-11-20 07:24:11
【问题描述】:

我有以这种格式存储的数据。我想在日期找到唯一的 msisdn。即,依靠日期的唯一 msisdn

{
    "_id" : ObjectId("5e551b2e63a0f1fc55f026dd"),
    "dateHour" : "2020-02-25 13",
    "detail" : [
        {
            "campaignId" : "5e4a937b459418737cc1dfa5",
            "timestamp" : "2020-02-25 13:03:626",
            "msisdn" : "050920305373677038659253736080036024-1582133696781",
            
        },
        {
            "campaignId" : "5e4a937b459418737cc1dfa5",
            "timestamp" : "2020-02-2025 13:04:626",
            "msisdn" : "050920305373677038659253736080036024-1582133696781",
            
        },
        {
            "campaignId" : "5e4a937b459418737cc1dfa5",
            "timestamp" : "2020-02-25 13:06:626",
            "msisdn" : "050920305373677038659253-1582133696781",
            
        }
        
    ]
}

【问题讨论】:

  • 这是否意味着您需要通过msisdn 和timestamp 的组合找到唯一的?
  • 我需要在日期 2020-02-25 上找到唯一的 msisdn:唯一 msisdn 的数量是 2{date :2020-02-25,msisdn:2,date:2020-02- 26,msisdn:3}
  • 有两个日期,dateHour和timestamp,你需要拿哪一个?
  • 我想参加 dateHour

标签: mongodb mongodb-query aggregation-framework aggregate aggregation


【解决方案1】:

您可以执行以下操作

[
  {
    $unwind: "$detail"
  },
  {
    $addFields: {
      "dHr": {
        $substr: [
          "$dateHour",
          0,
          10
        ]
      }
    }
  },
  {
    $group: {
      _id: "$dHr",
      msisdn: {
        $addToSet: "$detail.msisdn"
      }
    }
  },
  {
    $project: {
      _id: 0,
      date: "$_id",
      count: {
        $size: "$msisdn"
      }
    }
  }
]

工作Mongo playground

【讨论】:

  • 成功了.. 非常感谢。
  • 欢迎您,但是当您发布问题时,请检查您是否包含所有相关内容。祝你有美好的一天
猜你喜欢
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多