在mongodb上按日期分组

在mongodb上按日期分组,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我的文档是这样存储的,不,我无法更改它们: { "_id" : ObjectId("5ea773f219d60c4f1629203a"), "direction" : 135, "latitude" : -3.744851, "longitude" : -38.545571, "metrictimestamp" : "20180201025959", "odometer" : 55697826,

我的文档是这样存储的,不,我无法更改它们:

{
        "_id" : ObjectId("5ea773f219d60c4f1629203a"),
        "direction" : 135,
        "latitude" : -3.744851,
        "longitude" : -38.545571,
        "metrictimestamp" : "20180201025959",
        "odometer" : 55697826,
        "routecode" : 0,
        "speed" : 3,
        "deviceid" : 134680,
        "vehicleid" : 32040
}

我需要一组车辆ID,并且只需要此“metrictimestamp”中的一年中的一天,并计算同一车辆和一天有多少文档,想法???

我想说,您的
metrictimestamp
可能会包含前几个字符
20180201
,如
yyyyymmdd
,因此使用聚合可以得到月、日、,从字符串开始的一年。请尝试以下查询:

db.collection.aggregate([
  {
    $addFields: {
      day: { $toInt: { $substrBytes: [ "$metrictimestamp", 6, 2 ] } }, // $toInt can be optional
      month: { $toInt: { $substrBytes: [ "$metrictimestamp", 4, 2 ] } },
      year: { $toInt: { $substrBytes: [ "$metrictimestamp", 0, 4 ] } }
    }
  },
  {
    $group: {
      _id: { vehicleid: "$vehicleid", day: "$day", year: "$year" },
      count: { $sum: 1 }
    }
  }
])

测试:

您是如何获得此
20180201025959
的?那么,当你说
day
时,你的意思是从你的时间戳中得到
01
吗?场景是:我收到这样的de数据,由于某种原因,日期是一个长整数,我必须在不更改数据的情况下进行查询,是的,01是我的意思,这一天工作得很好,但是其他的事情,你能帮我把它放在这里吗一个键中的“日、月和年”类似于:_id:{vehicleid,date}您可以这样做:date:{$toInt:{$substrBytes:[“$metrictimestamp”,0,8]},在这里测试::()