Группа по дням года на mongodb - PullRequest
1 голос
/ 05 мая 2020

Мои документы хранятся так, и нет, я не могу их изменить:

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

Мне нужна группа по идентификатору автомобиля и только день года из этой метки времени, и посчитайте, сколько документы на тот же автомобиль и день, идеи ??

1 Ответ

1 голос
/ 05 мая 2020

Я бы сказал, что ваш metrictimestamp, вероятно, будет содержать первые несколько символов 20180201 как YYYYMMDD, поэтому, используя $ substrbytes в совокупности, вы можете получить месяц, день, год из строки. Попробуйте запрос ниже:

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 }
    }
  }
])

Тест: mongoplayground

...