是否有任何选项允许在从上限集合中删除文档时对其进行跟踪?
例如,我有一个状态为已处理或未处理的订单列表。因此,当 mongo 决定删除某些文档时,我想将这些订单保留在上限集合中并每次检查状态。如果订单已处理 - 所以,很酷,让他离开,但如果未处理,只需将其推回队列。
是否有任何选项允许在从上限集合中删除文档时对其进行跟踪?
例如,我有一个状态为已处理或未处理的订单列表。因此,当 mongo 决定删除某些文档时,我想将这些订单保留在上限集合中并每次检查状态。如果订单已处理 - 所以,很酷,让他离开,但如果未处理,只需将其推回队列。
Capped 集合是固定大小的集合,它会在集合已满时自动删除最旧的文档(基于插入顺序),方法是覆盖它们。
从概念上讲,上限集合是循环缓冲区而不是队列。
这听起来不太适合持久化订单信息的用例——当文档被删除时,没有“挂钩”可以将文档重新插入到上限集合中,如果上限集合太小,您可能会覆盖文件在处理之前。
我认为您真的想使用普通(无上限)集合。
如果您想根据某个状态值删除订单,您应该在应用程序代码中处理此问题(例如,当订单从“待处理”状态变为“已处理”状态时,执行所需的任何清理操作)。
如果您想在特定时间自动删除旧的/过期的订单,一个好的方法是使用具有文档级生存时间(TTL)到期的普通集合,例如:
db.orders.ensureIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
然后,您可以根据日期设置(或延长)每个订单文档的到期expireAt
时间。请注意,如果您需要同时检查值和状态字段,这可能不是一个合适的选项expireAt
(TTL 到期仅基于提供的日期索引)。