You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Beanie ODM操作MongoDB:排序跳过后删除仍删除全部匹配记录问题

解决MongoDB排序跳过后删除剩余记录的问题

你的代码里sort()和skip()没生效,是因为Mongoose中find()后链式调用delete()本质是直接执行deleteMany(),中间的排序、跳过逻辑不会作用于删除操作——删除只会匹配find()里的条件,直接删掉所有符合的文档,完全忽略后续的sort和skip。

要实现“排序后跳过前2条,删除剩余记录”,得先拿到要删除的文档ID,再根据ID删除,步骤如下:

  1. 查询并筛选出需要删除的文档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);
  1. 根据ID删除对应文档
// 避免空数组时执行无效删除
if (ids.length > 0) {
  await Book.deleteMany({ _id: { $in: ids } });
}

这种方法先明确获取到要删除的目标,再精准执行删除,就能实现你想要的逻辑。

内容的提问来源于stack exchange,提问作者mohamad mokhtari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:15:34