我得到了具有类似结构的集合:
"_id": ObjectId("64c9d5e028bcb318aa86685a"),
...
"ExamOrder" : [],
"ExamPerformed" : [
{
"authorDatetime" : "2023-08-01T16:15:00.000Z",
"result" : {
"value" : 114,
"unit" : "mmHg"
}
},
{
"authorDatetime" : "2023-08-01T16:15:00.000Z",
"result" : {
"value" : 70,
"unit" : "in"
}
}
],
...
我想要的是将每个文档中出现的任何单位“mmHg”替换为“mm[Hg]”。
我尝试过这样的事情:
updateMany(
{"ExamPerformed.result.unit" : "mmHg"},
[{
"$set":
{"ExamPerformed":
{"$map":
{"input": "$ExamPerformed",
"in":
{"$mergeObjects":
["$$this",
{"result": {
"unit":
{"$replaceAll":
{"input": "$unit",
"find": "in",
"replacement": "inches"}}
}
}]}}}}
但是这个会在每个条目中更改整个“结果”对象:
{
"authorDatetime" : "2023-08-01T16:15:00.000Z",
"result" : {
"unit" : null
}
},
预期结果:
"_id": ObjectId("64c9d5e028bcb318aa86685a"),
...
"ExamOrder" : [],
"ExamPerformed" : [
{
"authorDatetime" : "2023-08-01T16:15:00.000Z",
"result" : {
"value" : 114,
"unit" : "mm[Hg]"
}
},
{
"authorDatetime" : "2023-08-01T16:15:00.000Z",
"result" : {
"value" : 70,
"unit" : "in"
}
}
],
...
有人可以帮助我建立适当的聚合管道吗?
你们其实很亲近。使用
$map
和 $mergeObject
的正确语法如下:
db.collection.update({
"ExamPerformed.result.unit": {
"$regex": "mmHg"
}
},
[
{
"$set": {
"ExamPerformed": {
"$map": {
"input": "$ExamPerformed",
"as": "ep",
"in": {
"$mergeObjects": [
"$$ep",
{
"result": {
"value": "$$ep.result.value",
"unit": {
"$replaceAll": {
"input": "$$ep.result.unit",
"find": "mmHg",
"replacement": "mm[Hg]"
}
}
}
}
]
}
}
}
}
}
])