MongoDB:如何将文档中的对象转为带key字段的数组?
MongoDB对象转数组字段的解决方案
你需要把data字段下的键值对结构转换成包含key字段的数组,用$objectToArray配合$map就能实现,之前的语法异常大概率是没正确处理转换后的元素结构或者键的类型。
查询转换(临时输出结果)
用聚合管道处理,直接返回转换后的文档:
db.collection.aggregate([ { $addFields: { data: { $map: { input: { $objectToArray: "$data" }, // 把对象转成[{k: "2", v: {...}}, {k: "3", v: {...}}]的格式 as: "item", in: { key: { $toInt: "$$item.k" }, // 把字符串键转成数字类型 property: "$$item.v.property", comments: "$$item.v.comments" } } } } } ])
直接更新文档(永久修改)
如果要把数据库里的文档直接改成目标结构,用带管道的更新操作:
db.collection.updateMany( {}, // 匹配所有文档,可根据需求加过滤条件 [ { $set: { data: { $map: { input: { $objectToArray: "$data" }, as: "item", in: { key: { $toInt: "$$item.k" }, property: "$$item.v.property", comments: "$$item.v.comments" } } } } } ] )
关键说明
$objectToArray负责把对象拆成k(键名)和v(值)组成的数组元素$map遍历这个数组,把每个元素的k转成数字,再和v里的字段合并成你需要的结构- 如果你的键本来就是数字类型(不是字符串),可以去掉
$toInt步骤
内容的提问来源于stack exchange,提问作者Moravas
相关产品推荐
相关产品推荐

