更新n个具有最大值的元素

我想在mongo db集合中实现软删除(硬删除每天在特定进程中进行一次)。 我的应用程序可以列出该集合的所有活动元素+ N个最近删除的元素。

我的想法是在项目中添加标记to_delete:删除元素时

  • deletion_date设置为当前日期
  • 为删除的元素设置to_delete: true,除了最近的5个元素(deleting_date最高)

这样,我的列表和硬删除都很容易实现:

  • 列出是一个简单的请求,返回所有具有to_delete=false的元素
  • 硬删除是一个简单的请求,删除所有具有to_delete=true的元素

我的问题是知道我可以编写以下查询:

  • 为删除的元素设置to_delete: true,除了最近的5个元素(deleting_date最高)
lyz2046 回答:更新n个具有最大值的元素

我不确定您是否需要to_delete字段。

我将进行排序+限制以查找最后删除的N个:

const elements = await db.elements.find({ deletion_date: { $exists: true } },{ $sort: { deletion_date: -1 },$limit: n });

如果您在deletion_date上添加索引,查询将非常快。参见https://docs.mongodb.com/manual/indexes/#single-field

对于硬删除:

db.elements.remove({ 
    deletion_date: { $exists: true },_id: { $nin: elements.map(e => e._id) }
});
本文链接:https://www.f2er.com/3166126.html

大家都在问