向 mongo 聚合中的对象数组中的每个对象添加字段
Add field to every object in array of objects in mongo aggregation
我在根级别的模式中有一个字段,我想将它添加到数组中符合条件的每个对象中。
这是一个示例文档....
{
calls: [
{
"name": "sam",
"status": "scheduled"
},
{
"name": "tom",
"status": "cancelled"
},
{
"name": "bob",
"status": "scheduled"
},
],
"time": 1620095400000.0,
"call_id": "ABCABCABC"
}
所需文件如下:
[
{
"call_id": "ABCABCABC",
"calls": [
{
"call_id": "ABCABCABC",
"name": "sam",
"status": "scheduled"
},
{
"name": "tom",
"status": "cancelled"
},
{
"call_id": "ABCABCABC",
"name": "bob",
"status": "scheduled"
}
],
"time": 1.6200954e+12
}
]
call_id
应添加到数组中状态为“已安排”的所有对象。
是否可以使用 mongo 聚合来做到这一点?我试过 $addFields
但无法达到上述结果。
提前致谢!
这是我使用 $map and $mergeObjects
的方法
db.collection.aggregate([
{
"$addFields": {
calls: {
$map: {
input: "$calls",
as: "call",
in: {
$cond: [
{
$eq: [
"$$call.status",
"scheduled"
]
},
{
"$mergeObjects": [
"$$call",
{
call_id: "$call_id"
}
]
},
"$$call"
]
}
}
}
}
}
])
我在根级别的模式中有一个字段,我想将它添加到数组中符合条件的每个对象中。
这是一个示例文档....
{
calls: [
{
"name": "sam",
"status": "scheduled"
},
{
"name": "tom",
"status": "cancelled"
},
{
"name": "bob",
"status": "scheduled"
},
],
"time": 1620095400000.0,
"call_id": "ABCABCABC"
}
所需文件如下:
[
{
"call_id": "ABCABCABC",
"calls": [
{
"call_id": "ABCABCABC",
"name": "sam",
"status": "scheduled"
},
{
"name": "tom",
"status": "cancelled"
},
{
"call_id": "ABCABCABC",
"name": "bob",
"status": "scheduled"
}
],
"time": 1.6200954e+12
}
]
call_id
应添加到数组中状态为“已安排”的所有对象。
是否可以使用 mongo 聚合来做到这一点?我试过 $addFields
但无法达到上述结果。
提前致谢!
这是我使用 $map and $mergeObjects
的方法db.collection.aggregate([
{
"$addFields": {
calls: {
$map: {
input: "$calls",
as: "call",
in: {
$cond: [
{
$eq: [
"$$call.status",
"scheduled"
]
},
{
"$mergeObjects": [
"$$call",
{
call_id: "$call_id"
}
]
},
"$$call"
]
}
}
}
}
}
])