0

そのため、データの月ごとの平均を取得しようとしており、いくつかの SO 投稿で見たパターンに従いましたが、_id の結果が null として戻ってきて、その理由を理解できないようです。私のモデルの日付は確かに日付型です。

{
$match: {
  date: {$gte: startDate, $lte: endDate }
},
$project: {
    'date': 1
  , 'fatigue.percent': 1
  , 'fitness.percent': 1
  , 'maintenance.percent': 1
  , 'substances.percent': 1
  , 'unsafe.percent': 1
  , 'created_on': {
      month: { '$month': '$date' }
    }
}
,$group: {
      _id: '$created_on'
    , averageFatigue: {$avg : '$fatigue.percent'}
    , averageFitness: {$avg : '$fitness.percent'}
    , averageMaintenance: {$avg : '$maintenance.percent'}
    , averageSubstances: {$avg : '$substances.percent'}
    , averageUnsafe: {$avg : '$unsafe.percent'}
  }
}
4

1 に答える 1

2

$project と $group のパイプライン演算子式は、$match のように中かっこで囲む必要があります。

db.test.aggregate(
{
  $match: {
            date: {$gte: startDate, $lte: endDate }
          }
},
{ 
  $project: {
    'date': 1
  , 'fatigue.percent': 1
  , 'fitness.percent': 1
  , 'maintenance.percent': 1
  , 'substances.percent': 1
  , 'unsafe.percent': 1
  , 'created_on': {
                    month: { '$month': '$date' }
                  }
  }
},
{
  $group: {
      _id: '$created_on'
    , averageFatigue: {$avg : '$fatigue.percent'}
    , averageFitness: {$avg : '$fitness.percent'}
    , averageMaintenance: {$avg : '$maintenance.percent'}
    , averageSubstances: {$avg : '$substances.percent'}
    , averageUnsafe: {$avg : '$unsafe.percent'}
  }
}
)
于 2013-04-11T22:14:17.077 に答える