更改mongoDB聚合结果的格式

更改mongoDB聚合结果的格式,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,目前,我正在运行此查询以计算平均值并以特定格式返回数据: db.metrics.aggregate([ { $unwind:"$data" }, { $group:{ _id:"$data.configName", avg:{ $avg:"$data.linesCount" }, data:{ $last:"$d

目前,我正在运行此查询以计算平均值并以特定格式返回数据:

db.metrics.aggregate([  
   {  
      $unwind:"$data"
   },
   {  
      $group:{  
         _id:"$data.configName",
         avg:{  
            $avg:"$data.linesCount"
         },
         data:{  
            $last:"$data"
         },
         date:{  
            $last:"$date"
         }
      }
   }
]).pretty()
在包含此格式对象的集合上:

{
        "_id" : {
                "date" : 1526569274000,
        }
        "date" : "20150220",
        "data" : [
                {
                        "configName" : "aaa",
                        "linesCount" : 500,
                        "insertedLinesCount" : 658,
                }
        ],
        "applicationName" : "loader"
}
返回以下结果:

{
        "_id" : "aaa",
        "avg" : 500,
        "data" : {
                "configName" : "aaa",
                "linesCount" : 500,
                "insertedLinesCount" : 658,
                "succeeded" : true
        },
        "date" : "20150220"
}
细节是正确的,但我想更改格式。是否有任何方法可以获取数据对象中的内容并返回它,以便最终结果是1-1映射列表,如下所示:

{
        "_id" : "aaa",
        "avg" : 500,
        "configName" : "aaa",
        "linesCount" : 500,
        "insertedLinesCount" : 658,
        "fileFormat" : "",
        "date" : "20150220"
}

$group

{
  $replaceRoot: {
     newRoot: {
        _id: "$_id",
        avg: "$avg",
        configName: "$data.configName"
        ...
     }
  }
}

您需要在结果末尾使用
$project
阶段

db.collection.aggregate([
  {
    $unwind: "$data"
  },
  {
    $group: {
      _id: "$data.configName",
      avg: {
        $avg: "$data.linesCount"
      },
      data: {
        $last: "$data"
      },
      date: {
        $last: "$date"
      }
    }
  },
  {
    $project: {
      configName: "$data.configName",
      insertedLinesCount: "$data.insertedLinesCount",
      linesCount: "$data.linesCount",
      succeeded: "$data.succeeded",
      _id: 1,
      avg: 1,
      date: 1
    }
  }
])
上面的查询给出了以下结果。。。检查一下

[
  {
    "_id": "aaa",
    "avg": 500,
    "configName": "aaa",
    "date": "20150220",
    "insertedLinesCount": 658,
    "linesCount": 500,
    "succeeded": true
  }
]