如何在MongoDB的login集合数组字段中插入新ID?
如何向MongoDB集合的数组字段中插入新元素而不覆盖原有内容
你当前用$set操作符会直接替换整个list_of_docs_bought字段的值,所以才会覆盖原有数组。要实现向数组中追加新ID的需求,需要使用MongoDB专门针对数组的更新操作符:
1. 直接追加元素(允许重复)
使用$push操作符,它会将新元素添加到数组的末尾,不会影响原有元素:
let collection = database.collection('login') let doc = collection.updateOne( { email: req.session.username }, { $push: { list_of_docs_bought: '2xx729' } } )
2. 去重追加元素(避免重复ID)
如果需要确保同一个ID不会被重复添加到数组中,可以用$addToSet操作符,只有当元素不存在于数组时才会执行添加:
let collection = database.collection('login') let doc = collection.updateOne( { email: req.session.username }, { $addToSet: { list_of_docs_bought: '2xx729' } } )
关键说明
$set的作用是替换整个字段的值,所以你之前的代码会把数组替换成单个字符串'2xx729',这就是覆盖问题的根源。$push和$addToSet是MongoDB为数组字段设计的更新操作符,专门用于数组元素的添加操作,不会修改原有数组的其他元素。
内容的提问来源于stack exchange,提问作者bobthebuilder
相关产品推荐
相关产品推荐

