2016-11-09 57 views
0

我試圖通過使用id字段,datetime字段和項目值和日期字段的總和來進行分組。

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」: 「二〇一六年十月三十○日」

當我使用$ dateToString沒有$組它的工作原理罰款。我在這裏錯過了什麼。

+0

那是因爲你沒有現場'time_in'在您的直接管道中的'$ group'階段之後。 – chridam

回答

1

添加$ time_in在firststage

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