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']] } ] } } } ] )
逻辑说明
- 判断元素是否存在:用
$in检查目标元素(这里是'one')是否在example.arrayOfStrings数组中 - 存在时移除:用
$filter遍历数组,保留所有不等于目标元素的项,相当于实现$pull的效果 - 不存在时添加:用
$concatArrays把原数组和包含目标元素的单元素数组合并,相当于实现$push的效果
内容的提问来源于stack exchange,提问作者SoEzPz
相关产品推荐
相关产品推荐

