如何在MongoDB中条件性向数组添加不存在的元素 无需提前查询
解决方案
直接将原代码中的$push操作符替换为MongoDB原生提供的$addToSet操作符即可,该操作符会自动判断元素是否已存在于目标数组中,仅当元素不存在时才执行添加操作,全程无需提前查询数据库,所有逻辑都在数据库侧执行。
修改后的代码如下:
await db .collection(config.MY_COLLECTION) .updateOne( { _id: ObjectId(userId) }, { $addToSet: { my_array: ObjectId(idToAdd) } } );
补充说明
$addToSet判断重复的规则是完全匹配值与数据类型,你当前场景中存储的是ObjectId类型数据,只要待添加的ObjectId值和数组中已有元素完全一致就会被判定为重复,不会重复插入- 如果需要一次性添加多个元素,可以搭配
$each修饰符使用,示例语法:
{ $addToSet: { my_array: { $each: [ObjectId(id1), ObjectId(id2)] } } }
内容的提问来源于stack exchange,提问作者Loudrous
相关产品推荐
相关产品推荐

