我可以控制聚合查询的输出格式吗?

时间:2015-04-08 17:43:34

标签: mongodb

我很好奇我控制聚合查询结果格式的选项。

以下是我正在谈论的结果集:

我希望monthyearaveragecount处于同一级别。我也希望_id能够离开。

这可能吗?

如果没有,我可以对数据进行后期处理,但我想确保首先没有遗漏任何内容。

[
{
    "result" : [ 
        {
            "_id" : {
                "month" : 10,
                "year" : 2014
            },
            "average" : 84.2586640583996598,
            "count" : 20959.0000000000000000
        }, 
        {
            "_id" : {
                "month" : 11,
                "year" : 2014
            },
            "average" : 96.9326915103888638,
            "count" : 20743.0000000000000000
        }
    ],
    "ok" : 1.0000000000000000
}
]

...这里是生成这些结果的查询:

db.mycollection.aggregate(
    [
      { 
          $match: { 
              mydate: { 
                  $gte: new Date(Date.UTC(2014, 10, 1)),
                  $lt: new Date(Date.UTC(2014, 12, 1)),
              } 
          } 
      },
      {
        $group : {
           _id : { month: { $month: "$mydate" }, year: { $year: "$mydate" } },
           average: { $avg: "$mynumericfield" },
           count: { $sum: 1 }
        }
      }

   ]
 )

1 个答案:

答案 0 :(得分:3)

您应该能够在$project操作中重命名字段,并且还可以从$project内的输出中删除字段。

(不知道格式是否正确,只是为了显示方式):

db.mycollection.aggregate(
[
  { 
      $match: { 
          mydate: { 
              $gte: new Date(Date.UTC(2014, 10, 1)),
              $lt: new Date(Date.UTC(2014, 12, 1)),
          } 
      } 
  },
  {
    $group : {
       _id : { month: { $month: "$mydate" }, year: { $year: "$mydate" } },
       average: { $avg: "$mynumericfield" },
       count: { $sum: 1 }
    }
  },
  {
    $project : {
      _id : 0,
      month : "$_id.month",
      year : "$_id.year",
      average : 1,
      count : 1
    }
  }

  ]
 )