MongoDB聚合:将JSON字符串字段转为对象并保留其他字段
解决MongoDB聚合中解析JSON字符串并保留其他字段的问题
你的聚合语句使用$project时仅指定了address字段,MongoDB默认会丢弃所有未明确声明的字段。要同时保留其他字段并将address的JSON字符串转为对象,可通过以下两种方式调整:
方法1:使用$addFields(推荐)
$addFields的核心特性是自动保留所有原有字段,仅替换或新增指定字段,无需手动列举其他字段,是最便捷的方案:
{ $addFields: { "address": { $function: { "body": "function(address){ return JSON.parse(address) }", "args": ["$address"], "lang": "js" } } } }
方法2:改进$project语句
如果一定要使用$project,可通过两种方式保留其他字段:
方式A(MongoDB 4.4+支持):用"*": 1包含所有原有字段
{ $project: { "*": 1, // 包含所有原字段 "address": { $function: { "body": "function(address){ return JSON.parse(address) }", "args": ["$address"], "lang": "js" } } } }
方式B:显式列出所有需要保留的字段
若你的MongoDB版本不支持"*": 1,可手动写出所有要保留的字段:
{ $project: { "name": 1, "contact": 1, "gender": 1, "address": { $function: { "body": "function(address){ return JSON.parse(address) }", "args": ["$address"], "lang": "js" } } } }
内容的提问来源于stack exchange,提问作者xxestter
相关产品推荐
相关产品推荐

