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

MongoDB如何在嵌套对象中递减指定字段值且不低于0?

嵌套MongoDB文档的weight字段递减更新方案

你提到的@rpatel的非嵌套场景方案,核心是用$max和$subtract组合实现不低于0的数值递减,嵌套场景只需要通过$map遍历多层数组,把相同逻辑套用到对应层级即可。

适配嵌套结构的更新代码

db.collection.update(
  // 查询条件:快速定位包含目标仓库和食品的文档
  {
    "storage.location": "Dubai",
    "storage.storedFood.code": "38102371982"
  },
  // 更新管道:逐层处理嵌套数组
  [
    {
      $set: {
        storage: {
          $map: {
            input: "$storage",
            as: "store",
            in: {
              $cond: {
                if: { $eq: ["$$store.location", "Dubai"] },
                then: {
                  ..."$$store",
                  storedFood: {
                    $map: {
                      input: "$$store.storedFood",
                      as: "food",
                      in: {
                        $cond: {
                          if: { $eq: ["$$food.code", "38102371982"] },
                          then: {
                            ..."$$food",
                            weight: {
                              $max: [
                                0,
                                { $subtract: ["$$food.weight", 20] } // 20为递减数值,可按需修改
                              ]
                            }
                          },
                          else: "$$food"
                        }
                      }
                    }
                  }
                },
                else: "$$store"
              }
            }
          }
        }
      }
    }
  ],
  { multi: true } // 如需更新多个匹配文档,添加此选项
)

代码逻辑说明

  • 外层$map遍历storage数组,仅对location为"Dubai"的仓库项进行修改
  • 内层$map遍历目标仓库的storedFood数组,定位到code匹配的食品
  • 通过$subtract计算递减后的weight,再用$max确保结果不低于0
  • 不匹配的数组项直接保留原数据,避免修改无关内容

嵌套对象与复杂管道学习资源

  • MongoDB官方数组操作文档:详细讲解$map、$filter、$cond等核心操作符,包含大量嵌套数组处理示例
  • MongoDB更新管道指南:官方出品的聚合式更新教程,覆盖嵌套文档、数组修改等复杂场景
  • MongoDB聚合框架实战:聚焦多层嵌套结构的聚合与更新案例,讲解如何组合多个操作符实现复杂业务逻辑

内容的提问来源于stack exchange,提问作者Cinc-B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:35:12