You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:11:05