Jit*_*iya 1 mongodb aggregation-framework
我有一个这样的收藏
[{
"_id" : ObjectId("590c2331dc1a05e7d3525e70"),
"name" : "Orange",
"quarters" : {
"first" : 20,
"middle" : 53,
"last" : 52
}
}, {
"_id" : ObjectId("590c2405dc1a05e7d3525e71"),
"name" : "Apple",
"quarters" : {
"first" : 42,
"middle" : 37,
"last" : 16
}
}]
Run Code Online (Sandbox Code Playgroud)
我想要这样的结果
[{
name: "Orange",
first: 20
},{
name: "Orange",
middle: 53
},{
name: "Orange",
last: 52
},{
name: "Apple",
first: 42
},{
name: "Apple",
middle: 37
},{
name: "Apple",
last: 16
}]
Run Code Online (Sandbox Code Playgroud)
我试图找到解决方案,但发现很少有与此问题类似的问题,但没有运气
提前致谢
您可以在3.4.4版本中尝试以下聚合管道。
的改变quarters嵌入的文档转换成密钥值对阵列使用$objectToArray 随后$unwind与$zip各quarters键值对分别随后$arrayToObject创建原始结构。
使用$addFields该推name场进quarters。
用于$replaceRoot将quarters嵌入的文档提升到顶级。
db.collection.aggregate([
{$addFields: {quarters: {$objectToArray: "$quarters"}}},
{$unwind:"$quarters"},
{$addFields:{quarters: {"$arrayToObject":{$zip:{inputs:[["$quarters.k"], ["$quarters.v"]]}}}}},
{$addFields:{"quarters.name": "$name"}},
{$replaceRoot:{newRoot:"$quarters"}}
])
Run Code Online (Sandbox Code Playgroud)