Срок действия коллекции в Mongo с помощью Casbah SureIndex

Я пытаюсь истечь срок действия коллекции в Mongo, используя API Casbah sureIndex.

На основе этого документа http://docs.mongodb.org/manual/tutorial/expire-data/

Я использую предложенный casbah API-интерфейс sureIndex.

 collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))

срок действия коллекции через 2 минуты...

Коллекция не вытесняется и не просрочена.

Я пропустил что-нибудь еще здесь?

Спасибо


person conikeec    schedule 16.08.2013    source источник
comment
Вы можете добавить пример документа?   -  person kmfk    schedule 16.08.2013


Ответы (2)


Есть пара вещей, которые нужно проверить:

  1. Вы просто следовали документам до буквы T и пытались создать индекс для поля status, которого на самом деле нет в ваших документах? (нужно хотя бы спросить...)
  2. Поле status содержит ТОЛЬКО dates? Теоретически его можно смешивать, но только документы с типом даты будут рассматриваться на предмет истечения срока действия.
  3. Вы проверили индексы своей коллекции, чтобы убедиться, что индекс был создан правильно?

Чтобы проверить индекс из консоли, выполните: db.collection.getIndexes(). Если индекс был создан успешно, дважды проверьте наличие соответствующих полей status в ваших документах и ​​правильность дат.

Добавление одного индекса не создает для вас поле даты — вам нужно будет добавить его в документы или использовать существующее поле даты, которое не является частью какого-либо другого индекса.

Также обратите внимание, из документов:

Срок действия индексов TTL истекает путем удаления документов в фоновой задаче, которая запускается каждые 60 секунд.

Итак, если у вас есть срок действия 120 second, имейте в виду, что, возможно, документы могут оставаться в течение 120 seconds до 179 seconds, плюс-минус, в зависимости от того, когда срок действия документа истек и фоновая задача выполнялась в последний раз.

редактировать: Как отмечено в комментариях, саму коллекцию нельзя удалить на основе индекса TTL, срок действия индекса истекает только для документов в коллекции.

person kmfk    schedule 16.08.2013
comment
статус - это поле даты, и мне удалось заставить его работать ... Теперь срок действия всех документов в коллекции истекает. Есть ли метод или флаг для удаления коллекции, особенно если все документы выселены. - person conikeec; 16.08.2013
comment
Спасибо за подробный ответ. Да, экземпляр mongod запускается каждые «x» минут, поэтому может быть потенциальный перекос в TTL, что меня устраивает. - person conikeec; 16.08.2013
comment
Нет, саму коллекцию с TTL удалить нельзя, только документы в ней. - person Derick; 16.08.2013
comment
Ах да, когда вы сказали, что срок действия collection не истек, я предположил, что вы имели в виду документы. @Derick выше здесь правильно. - person kmfk; 16.08.2013
comment
@kmfk, так что добавь это к своему ответу ;-) - person Derick; 16.08.2013
comment
@conikeec, может быть, стоит сказать другим, в чем проблема с твоей коллекцией? Предположительно, это был неправильный синтаксис для создания индекса? - person Eddie Jamsession; 02.12.2013

Я думаю, вы неправильно передаете параметры.

Так должно быть-

collection.ensureIndex(DBObject("status" -> 1), DBObject("expireAfterSeconds" -> 120))

Вместо-

collection.ensureIndex(DBObject("status" -> 1, "expireAfterSeconds" -> 120))
person Kunal_Hire    schedule 08.02.2016