2016-11-09 1 views
0

私はidフィールド、datetimeフィールドを使用してグループを行い、値と日付フィールドの合計を投影しようとしています。 "2016年10月30日"

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

は私が

"yerMonthDay" としてyearMonthDayを取得する必要があるように私は、クエリ上で使用して結果を得た

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

$ dateToStringを$ groupなしで使用すると動作します良い。何が私はここで欠場したのですか?

+0

を$のtime_inを追加します。 – chridam

答えて

1

あなたは `$のgroup`段階の後に、あなたの即時のパイプライン内のフィールド` 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 
      } 
     }]) 
関連する問題