[英]Mongodb Aggregate with nested subdocuments
我有一个看起来像这样的文件:
{
"_id": "some_uuid",
"inv": {
"food01": "id01",
"food02": "id02",
"food03": "id03"
},
"food": {
"id01": {
"n": "apple"
},
"id02": {
"n": "banana"
},
"id03": {
"n": "pear"
}
}
}
我想使用 Mongodb Aggregate 来检索以下输出。
预期产出
{
"_id": "some_uuid",
"inv": {
"food01": "apple",
"food02": "banana",
"food03": "pear"
}
}
有人可以指导我如何做到这一点吗? 谢谢!
一种选择是使用$objectToArray
将这些字段格式化为数组,这将允许使用$map
和$filter
来匹配它们:
db.collection.aggregate([
{$set: {inv: {$objectToArray: "$inv"}, food: {$objectToArray: "$food"}}},
{
$project: {
inv: {$map: {
input: "$inv",
in: {
k: "$$this.k",
v: {
$filter: {
input: "$food",
as: "food",
cond: {$eq: ["$$this.v", "$$food.k"]}
}
}
}
}
}
}
},
{
$project: {
inv: {
$map: {
input: "$inv",
in: {k: "$$this.k", v: {$first: "$$this.v.v.n"}}
}
}
}
},
{$project: {inv: {$arrayToObject: "$inv"}}}
])
看看它在操场上的例子是如何工作的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.