[英]MongoDB Aggregation - Dynamic `$addField`
我有以下格式为_id: userID
的 object 和 Mongoose 查询:
const obj = {
111: "222",
333: "444",
555: "666"
};
Model.aggregate([
{
$addFields: {
userID: ???
}
}
]);
我需要一种基于 object 向每个文档添加userID
字段的方法。假设该集合具有以下数据:
[
{
_id: "111",
...
},
{
_id: "333",
...
},
{
_id: "555",
...
}
]
该文档最终应如下所示:
[
{
_id: "111",
userID: "222",
...
},
{
_id: "333",
userID: "444",
...
},
{
_id: "555",
userID: "666",
...
}
]
我怎样才能做到这一点?
您需要从$ objectToArray 开始,以获取动态 object 作为键和值的数组。 然后你可以使用$filter来查找匹配对,使用$arrayElemAt来获取单个元素:
db.collection.aggregate([
{
$addFields: {
userId: {
$let: {
vars: {
match: {
$arrayElemAt: [
{
$filter: {
input: { $objectToArray: { 111: "222", 333: "444", 555: "666" } },
cond: { $eq: [ "$$this.k", { $toString: "$_id" } ] }
}
},
0
]
}
},
in: "$$match.v"
}
}
}
}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.