更改mongoDB聚合结果的格式

时间:2018-05-24 10:47:55

标签: mongodb

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

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"
}

2 个答案:

答案 0 :(得分:0)

$replaceRoot

之后添加$group阶段
{
  $replaceRoot: {
     newRoot: {
        _id: "$_id",
        avg: "$avg",
        configName: "$data.configName"
        ...
     }
  }
}

答案 1 :(得分:0)

您需要在结果

的末尾使用$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
    }
  }
])

以上查询会为您提供以下结果...请检查here

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