MongoDB更新:移除含指定子串的对象及数组内对象的键值对
移除MongoDB文档中对象及数组内对象的指定键值对
你需要移除文档中顶层prices对象和**list数组内每个元素的prices对象**里,所有键包含"AGE"的键值对。原查询仅处理了顶层prices,未覆盖数组内的元素,以下是修正后的完整更新语句:
db.collection.updateMany( {}, // 匹配所有文档,可根据需求调整查询条件 { $set: { // 处理顶层prices对象 "prices": { $arrayToObject: { $filter: { input: { $objectToArray: "$prices" }, cond: { $not: { $regexMatch: { input: "$$this.k", regex: "AGE" } } } } } }, // 处理list数组内的每个prices对象 "list": { $map: { input: "$list", as: "item", in: { // 保留元素原有字段,仅替换prices ..."$$item", "prices": { $arrayToObject: { $filter: { input: { $objectToArray: "$$item.prices" }, cond: { $not: { $regexMatch: { input: "$$this.k", regex: "AGE" } } } } } } } } } } } )
关键逻辑说明
- 顶层
prices处理:和原逻辑一致,通过$objectToArray将对象转为键值对数组,$filter过滤掉键包含"AGE"的项(用$not配合$regexMatch更直观),最后用$arrayToObject转回对象格式。 list数组处理:用$map遍历数组每个元素,通过...$$item保留元素原有字段(如id),仅对prices字段执行和顶层一致的过滤替换操作。- 若只需更新单个文档,将
updateMany替换为updateOne,并调整第一个参数的匹配条件即可。
内容的提问来源于stack exchange,提问作者phani
相关产品推荐
相关产品推荐

