Beanie ODM操作MongoDB:排序跳过后删除仍删除全部匹配记录问题
解决MongoDB排序跳过后删除剩余记录的问题
你的代码里sort()和skip()没生效,是因为Mongoose中find()后链式调用delete()本质是直接执行deleteMany(),中间的排序、跳过逻辑不会作用于删除操作——删除只会匹配find()里的条件,直接删掉所有符合的文档,完全忽略后续的sort和skip。
要实现“排序后跳过前2条,删除剩余记录”,得先拿到要删除的文档ID,再根据ID删除,步骤如下:
- 查询并筛选出需要删除的文档ID
// 仅查询符合条件、排序后跳过前2条的文档ID,只返回_id字段提升性能 const targetBookIds = await Book.find( { 'owner.id': user.id }, { _id: 1 } ) .sort('-created_at') .skip(2) .lean(); // 用lean()获取纯JSON,减少Mongoose文档转换开销 // 提取ID数组 const ids = targetBookIds.map(item => item._id);
- 根据ID删除对应文档
// 避免空数组时执行无效删除 if (ids.length > 0) { await Book.deleteMany({ _id: { $in: ids } }); }
这种方法先明确获取到要删除的目标,再精准执行删除,就能实现你想要的逻辑。
内容的提问来源于stack exchange,提问作者mohamad mokhtari
相关产品推荐
相关产品推荐

