MongoDB/Mongoose:按用户名删除数组元素,数组为空时删除整个文档
解决方案
这个需求完全可以通过单次数据库请求实现,不需要分两次查询单独判断数组状态,以最常用的文档数据库MongoDB为例,可通过bulkWrite批量操作实现,代码示例如下:
// 替换为你要删除的userName值 const targetUserName = "apple"; // 替换为你的实际集合名 db.yourCollection.bulkWrite([ // 第一步:删除所有文档中userInfo数组里匹配userName的元素 { updateMany: { filter: {}, update: { $pull: { userInfo: { userName: targetUserName } } } } }, // 第二步:删除所有userInfo数组为空的文档 { deleteMany: { filter: { userInfo: { $size: 0 } } } } ])
操作说明
- 两个操作会在同一次网络请求中发送给数据库服务端,按顺序执行,无需客户端先查询后判断再发起第二次请求
- 如果要删除的userName对应元素被移除后数组刚好为空,第二步会自动把整个文档删掉,完全匹配你的需求
- 即使有多条文档同时满足条件,也可以批量处理,不需要单独遍历操作
内容的提问来源于stack exchange,提问作者MrNobody
相关产品推荐
相关产品推荐

