使用Mongoose清空MongoDB数组或保留指定ID对象的问题
解决方案
需求1:清空Holde数组为[]
之前用$pull没彻底清空,大概率是因为数组中存在仅含_id的对象,$pull的匹配条件没覆盖到这类元素。直接用$set强制赋值为空数组是最稳妥的方式:
// 清空指定用户的Holde数组 await User.updateOne( { _id: targetUserId }, // 替换为你的实际查询条件,比如用户ID { $set: { Holde: [] } } );
如果一定要用$pull,可以匹配所有数组元素($pull会移除所有符合条件的项):
await User.updateOne( { _id: targetUserId }, { $pull: { Holde: {} } } // 匹配所有空对象或仅含默认字段的对象 );
不过$set的方式更直接且不易出错,优先推荐。
需求2:保留Holde数组中_id为_oldxxxxxxxx的对象,删除其余
使用$pull配合$ne(不等于)操作符,移除所有_id不是目标值的数组元素:
await User.updateOne( { _id: targetUserId }, { $pull: { Holde: { _id: { $ne: '_oldxxxxxxxx' } } } } );
注意事项
- 若你的
orderSchema中_id是MongoDB默认的ObjectId类型,需要把字符串ID转换成ObjectId才能匹配:const targetId = mongoose.Types.ObjectId('_oldxxxxxxxx'); await User.updateOne( { _id: targetUserId }, { $pull: { Holde: { _id: { $ne: targetId } } } } ); - 替换
targetUserId为你实际的用户筛选条件即可。
内容的提问来源于stack exchange,提问作者ron-tak
相关产品推荐
相关产品推荐

