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

问题描述 投票:0回答:1

我在 MongoDB 中有文档以字符串格式存储 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"
            }
        }
    }
}
mongodb aggregation-framework
1个回答
1
投票

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

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

MONGODB 游乐场

© www.soinside.com 2019 - 2024. All rights reserved.