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

MongoDB实现数组元素存在则移除、不存在则添加的更新操作

MongoDB数组元素「存在移除、不存在添加」的实现方案

你要实现的是MongoDB中对字符串数组的逻辑:指定元素不存在则添加,存在则移除。之前的写法无法正常工作,问题出在聚合更新管道里不能直接用$pull/$push作为$cond的分支结果,得改用聚合数组操作符来实现。

示例数据

DATA = [
  {
    name: 'one',
    example: {
      arrayOfStrings: ['one', 'two', 'three']
    }
  }
]

正确实现代码

db.getCollection('test').update(
  {name: 'one'},
  [
    {
      $set: {
        "example.arrayOfStrings": {
          $cond: [
            // 第一步:判断目标元素是否在数组中
            { $in: ['one', '$example.arrayOfStrings'] },
            // 存在则过滤掉该元素
            { $filter: {
                input: '$example.arrayOfStrings',
                cond: { $ne: ['$$this', 'one'] }
              }
            },
            // 不存在则拼接数组添加元素
            { $concatArrays: ['$example.arrayOfStrings', ['one']] }
          ]
        }
      }
    }
  ]
)

逻辑说明

  1. 判断元素是否存在:用$in检查目标元素(这里是'one')是否在example.arrayOfStrings数组中
  2. 存在时移除:用$filter遍历数组,保留所有不等于目标元素的项,相当于实现$pull的效果
  3. 不存在时添加:用$concatArrays把原数组和包含目标元素的单元素数组合并,相当于实现$push的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:57:16