更改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
}
]