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

MongoDB聚合场景下满足条件时使用$unset删除指定字段如何实现

实现方案

你只需要在现有聚合管道的末尾追加条件处理步骤即可,核心是利用MongoDB的$$REMOVE系统变量实现条件删字段,完整适配需求的聚合管道写法如下:

db.collection.aggregate([
  // 你已经写好的前置聚合逻辑放在此处
  // 新增的核心条件处理步骤
  {
    $set: {
      "user.code": {
        $cond: {
          if: { $in: ["$user.status", ["BLOCKED", "CANCELLED"]] },
          then: "$$REMOVE", // 状态匹配时直接移除code字段
          else: "$user.code" // 状态不匹配时保留原值
        }
      }
    }
  }
])

补充说明

  • 如果你还需要实现示例中的olderAdress数组拆分、合并用户公共字段生成多条文档的逻辑,可以在前置步骤中加入以下配置:
// 前置逻辑补充:拆分历史地址生成多条文档
{
  $addFields: {
    allUserEntries: {
      $concatArrays: [
        // 加入主用户本身的条目
        [ { $mergeObjects: ["$user", { olderAdress: "$$REMOVE" }] } ],
        // 合并历史地址与公共用户字段
        {
          $map: {
            input: "$user.olderAdress",
            in: { $mergeObjects: ["$user", "$$this", { olderAdress: "$$REMOVE" }] }
          }
        }
      ]
    }
  }
},
{ $unwind: "$allUserEntries" },
{
  $replaceRoot: {
    newRoot: { _id: "$_id", user: "$allUserEntries" }
  }
}
// 后面再追加上面的条件删code步骤即可
  • 如果你的MongoDB版本低于4.2不支持$$REMOVE,可以改用$project条件构造user对象,省略code字段即可实现相同效果。

内容的提问来源于stack exchange,提问作者Patrick Teixeira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:54:00