如何使用MongoDB聚合获得平坦JSON结果?
聚合之后,我得到了一个不期望的输出。我能做点什么吗如何使用MongoDB聚合获得平坦JSON结果?,mongodb,mongoose,aggregation,Mongodb,Mongoose,Aggregation,聚合之后,我得到了一个不期望的输出。我能做点什么吗 aggregate([ { "$match": { "CREATE_DATE": { "$lte": new Date(), "$gte": new Date(new Date().setDate(new Date().getDate()-120))
aggregate([
{ "$match": {
"CREATE_DATE": {
"$lte": new Date(),
"$gte": new Date(new Date().setDate(new
Date().getDate()-120))
}
} },
{ "$group": {
"_id": {
"month": { "$month": "$CREATE_DATE" },
"year": { "$year": "$CREATE_DATE" }
},
"avgofozone": { "$avg": "$OZONE" }
} }
])
实际输出:
预期输出:
使用MongoDB>=v3.4.4,您可以将以下阶段添加到现有管道的末尾,这将为您完成转换:
{
$addFields: {
result: {
$let: {
vars: { "months": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], arr: { $objectToArray: "$$ROOT" } },
in: {
"k" : { $arrayElemAt: [ "$$months" , { $subtract: [ { $arrayElemAt: [ "$$arr.v" , 2 ] }, 1 ] } ] },
"v" : { $arrayElemAt: [ "$$arr.v" , 0 ] }
}
}
}
}
}, {
$group: {
_id: "$year",
result: { $push: "$result" },
}
}, {
$addFields: {
"result": { $arrayToObject: "$result" },
}
}, {
$addFields: {
"result.zonetype": "avgofozone",
"result.year": "$_id"
}
}, {
$replaceRoot: {
newRoot: "$result"
}
}
您可以发布一个输入文档示例吗?@Vega我们可以显示月份名称整数无问题“{”\u id:ObjectId(“5a65b71a3071ebb37576b3b56”),“id:“201801210013631847000000”,“地区”:“ntvp”,“车站”:“APPCB”,“臭氧”:25.0,“标志1”:“NA”,“氨”:11.4,“苯”:6.7,“标志2”:“NA”,“FLAG3:“NA”,“CREATE_DATE”:ISODate(“2018-03-20T18:32:50.000Z”),“DATA_FROM:“Gtuy”}@Vega我的预期输出是每个月的数字替换为avgofozone,因为所有@dnickless iam都在尝试此代码显示错误消息.“errmsg”:“未知组运算符”$mergeObjects”“,@dnickless我的mongodb版本3.4主要看到我的更新答案,应该从3.4.4开始运行@dnickless我得到了输出pettaran,但一些错误avarageozone被替换为像这样的年份{“Jan”:2018,“Mar”:2018,“zonetype”:“avgofozone”,“year”:2018}我想你是用Robo3T来运行这个查询的吧?这里似乎有一只古怪的虫子——我也有同样的行为。尝试改用mongo.exe运行查询。
[
{
"zone_type": "avgofozone",
"year": 2018,
"February": 21.07777777777778,
"March": 17.8,
"January": 17.8
}
]
{
$addFields: {
result: {
$let: {
vars: { "months": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], arr: { $objectToArray: "$$ROOT" } },
in: {
"k" : { $arrayElemAt: [ "$$months" , { $subtract: [ { $arrayElemAt: [ "$$arr.v" , 2 ] }, 1 ] } ] },
"v" : { $arrayElemAt: [ "$$arr.v" , 0 ] }
}
}
}
}
}, {
$group: {
_id: "$year",
result: { $push: "$result" },
}
}, {
$addFields: {
"result": { $arrayToObject: "$result" },
}
}, {
$addFields: {
"result.zonetype": "avgofozone",
"result.year": "$_id"
}
}, {
$replaceRoot: {
newRoot: "$result"
}
}