我在 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"
}
}
}
}
您需要使用$addFields而不是$project,如果您不想删除其他字段
db.collection.aggregate({
$addFields: {
"address": {
$function: {
"body": "function(address){ return JSON.parse(address) }",
"args": [
"$address"
],
"lang": "js"
}
}
}
})