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