$dateToString возвращает null с $group в mongodb

Я пытаюсь создать группу, используя поле идентификатора, поле даты и времени и проецировать сумму значений и поле даты.

db.getCollection('driver_collections').aggregate([
{$group : { _id: {driverid:"$driver_id",day:{ $dayOfMonth: "$time_in"},
                  month:{$month:"$time_in"},year:{$year:"$time_in"}},
    amountCollected : {$sum:"$total_collection"}}    
    },{
       $project: {
          yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$time_in" }},
          amountCollected : 1
       }
   }]) 

Я использовал вышеуказанный запрос и получил результат как

{
    "_id" : {
        "driverid" : "58014ce1f39e0f9dc40000b2",
        "day" : 30,
        "month" : 10,
        "year" : 2016
    },
    "amountCollected" : 2094.0,
    "yearMonthDay" : null
}

Мне нужно получить yearMonthDay как

"yerMonthDay": "2016-10-30"

Когда я использую $dateToString без $group, все работает нормально. Что я пропустил здесь.


person Deepak selva    schedule 09.11.2016    source источник
comment
Это потому, что у вас нет поля time_in в конвейере сразу после этапа $group.   -  person chridam    schedule 09.11.2016


Ответы (1)


Добавьте $time_in на свой первый этап

 db.getCollection('driver_collections').aggregate([
    {$group : { _id: {driverid:"$driver_id",day:{ $dayOfMonth: "$time_in"},
                      month:{$month:"$time_in"},year:{$year:"$time_in"}},
    "time_in" : {$first : "$time_in"},
        amountCollected : {$sum:"$total_collection"}}    
        },{
           $project: {
              yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$time_in" }},
              amountCollected : 1
           }
       }]) 
person Parshuram Kalvikatte    schedule 09.11.2016