嵌套字符串JSON对象上的mongodb聚合

y53ybaqx  于 2023-04-29  发布在  Go
关注(0)|答案(1)|浏览(215)

我在MongoDB中有文档,它以String格式存储json对象,地址字段如下面的示例所示。如何使用聚合将json字符串转换为对象,而其他字段保持不变?

{   
    "name": "John",
    "contact": 123456789,
    "address": "{"building_name": "abc", "block": 40, "street_name": "test street", "postal_code":123456}"
    "gender": "m"
}

我用来将json字符串转换为对象的聚合如下所示,但其他字段,如名称,联系人也将被删除。如何只转换地址字段,而不转换姓名和联系人字段。

{
    $project:{
        "address":{
            $function:{
                "body": "function(address){ return JSON.parse(address) }",
                "args":[
                    "$address"
                ],
                "lang": "js"
            }
        }
    }
}
db2dz4w8

db2dz4w81#

如果不想删除其他字段,则需要使用$addFields而不是$project

db.collection.aggregate({
  $addFields: {
     "address": {
          $function: {
             "body": "function(address){ return JSON.parse(address) }",
              "args": [
                "$address"
              ],
            "lang": "js"
        }
     }
  }
})

MONGODB PLAYGROUND

相关问题