【问题标题】:More efficient way to group mongo documents对 mongo 文档进行分组的更有效方法
【发布时间】:2020-06-10 11:17:50
【问题描述】:

我在 mongo 中的文档是这样存储的:

{
        "_id" : ObjectId("5ea779501b4757cbca33e8e0"),
        "direction" : 180,
        "latitude" : -3.724404,
        "longitude" : -38.557694,
        "metrictimestamp" : ISODate("2018-02-01T02:59:34Z"),
        "odometer" : 161245809,
        "routecode" : 0,
        "speed" : 0,
        "deviceid" : 148469,
        "vehicleid" : 33089
}

我需要根据“metrictimestamp”字段上的日期对这些文档进行分组并计算同一天的车辆数量,我正在使用以下查询(请注意在 pymongo 上):

pipe = [

     {
      "$addFields": {
        "date": {

            "$substrBytes": [
              "$metrictimestamp",
              0,
              10
            ]

        }
      }
    },
    {
      "$group": {
        "_id": {
          "vehicleid": "$vehicleid",
          "date": "$date"
        },
        "count": {
          "$sum": 1
        }
      }
    }
              ]

这对我来说很好用,但我不能停止认为有更有效的方法可以做到这一点,感谢任何建议。

【问题讨论】:

    标签: mongodb aggregation-framework pymongo


    【解决方案1】:

    您可以在$group 阶段内进行日期格式化(或转换),从而避免最初的$addFields 阶段。拥有额外的阶段不利于处理,尤其是对于大型数据集。

    db.collection.aggregate( [
      { 
          "$group": { 
              "_id": { 
                  "vehicleid": "$vehicleid",
                  "date": { "$dateToString": { "format": "%Y-%m-%d", "date": "$metrictimestamp" } } 
              },
              "count": { "$sum": 1 }
          } 
      }
    ] )
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 2016-08-04
      相关资源
      最近更新 更多