Отслеживать удаленные документы в закрытой коллекции Mongo DB

Есть ли варианты, которые позволяют отслеживать документ, когда он будет удален из закрытой коллекции?

Например, у меня есть список заказов со статусом - обработано или нет. Поэтому я хочу сохранить эти заказы в закрытой коллекции и проверять статус каждый раз, когда Монго решает удалить какой-либо документ. Если заказ был обработан - так, круто, просто дайте ему уйти, но если он не был обработан, просто верните его в очередь.

1 ответ

Закрытые коллекции - это коллекции фиксированного размера, которые автоматически удаляют самые старые документы (в зависимости от порядка вставки), перезаписывая их после заполнения коллекции.

Концептуально ограниченные коллекции представляют собой кольцевой буфер, а не очередь.

Это не очень подходит для случая использования сохраняющейся информации о заказе - нет "крючка" для повторной вставки документов в ограниченную коллекцию при их удалении, и если ваша ограниченная коллекция слишком мала, вы можете перезаписать документы до их обработки.

Я думаю, что вы действительно хотите использовать обычную (не ограниченную) коллекцию.

Удалить старые заказы на основе статуса

Если вы хотите удалить ордера, основанные на каком-либо значении состояния, вы должны обработать это в коде приложения (например, когда ордер переходит из состояния "Ожидание" в состояние "Обработано", выполняется требуемая очистка).

Удалить старые / просроченные заказы на основе времени

Если вы хотите, чтобы старые / просроченные заказы автоматически удалялись в определенное время, хорошим подходом было бы использование обычной коллекции с истечением срока действия на уровне документа (TTL), например:

db.orders.ensureIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )

Затем вы можете установить (или продлить) срок действия для каждого документа заказа на основе expireAt Дата. Обратите внимание, что это не может быть подходящим вариантом, если вам нужно проверить оба expireAt значение и поле состояния (срок действия TTL основывается исключительно на предоставленном индексе даты).

Другие вопросы по тегам