【问题标题】:Null result for projected _id of created property on Mongo Aggregation queryMongo 聚合查询中已创建属性的投影 _id 的空结果
【发布时间】:2013-04-11 17:37:07
【问题描述】:

因此,我试图按月对我的数据进行平均细分,并遵循我在一些 SO 帖子中看到的模式,但 _id 结果返回为空,我似乎无法理解为什么。我模型中的日期确实是 Date 类型。

{
$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'}
  }
}

【问题讨论】:

  • 您是否尝试过使用月份这个术语:{ $month: '$date' } ? (注意 $month 运算符周围没有引号)
  • 刚试过,没用。

标签: mongodb aggregation-framework


【解决方案1】:

$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'}
  }
}
)

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多