2013-09-10 4 views
5

У меня есть простая схема, как:MongoDB TTL не вынимая документы

{ 
    _id: String,  // auto generated 
    key: String,  // there is a unique index on this field 
    timestamp: Date() // set to current time 
} 

Затем я установил индекс TTL, как так:

db.sess.ensureIndex({ "timestamp": 1 }, { expireAfterSeconds: 3600 }) 

Я ожидаю, что запись в удален через 1 час, но это никогда не удалялся. я щелкнул подробного журнала, и я вижу TTLMonitor бегущего

Tue Sep 10 10:42:37.081 [TTLMonitor] TTL: { timestamp: 1.0 } { timestamp: { $lt: new Date(1378823557081) } } 
Tue Sep 10 10:42:37.081 [TTLMonitor] TTL deleted: 0 

Когда я бегу, что запрос сам я вижу, все мои записи с истекшим сроком годности возвращаясь:

db.sess.find({ timestamp: { $lt: new Date(1378823557081) }}) 

... 

Любые идеи? Я в тупике.

EDIT - Пример документа ниже

{ "_id" : "3971446b45e640fdb30ebb3d58663807", "key" : "6XTHYKG7XBTQE9MJH8", "timestamp" : ISODate("2013-09-09T18:54:28Z") } 

ответ

5
  1. Можете ли вы показать нам, что вставленные записи на самом деле выглядит?

  2. Сколько времени "в принципе"? Потому что есть большое предупреждение:

    Предупреждение. Индекс TTL не гарантирует, что истекшие данные будут немедленно удалены. Может быть задержка между временем истечения срока действия документа и временем, в течение которого MongoDB удаляет документ из базы данных.

  3. Есть ли в поле метки времени индекс?

+3

TTLMonitor запускается каждые 60 секунд, поэтому я полагаю, что он должен быть поднят не менее чем на 1 минуту после истечения срока действия. Я никогда не хочу, чтобы никогда (например, прохождение дней, и ничто никогда не удалялось). Существует только 2 индекса - индекс TTL и уникальный индекс, который я указал на ключевое поле. Пример документа в редакторе. Спасибо за вашу помощь. – jckdnk111

+3

Нет, мне интересно, что вы видите, когда вы делаете 'db.sess.find(). Pretty()' - Я просто хочу подтвердить, что поле timestamp есть и не выглядит забавным. Для индексов вы должны сделать 'db.sess.getIndexes()', чтобы подтвердить, что это все индексы, которые есть. – jcollum

+0

О, редактирование не показывалось при первом обновлении, нечетное – jcollum

3

Это был мой вопрос: я имел индекс, созданный не так, как это:

{ 
    "v" : 1, 
    "key" : { 
     "columnName" : 1, 
     "expireAfterSeconds" : 172800 
    }, 
    "name" : "columnName_1_expireAfterSeconds_172800", 
    "ns" : "dbName.collectionName" 
} 

Когда он должен был это: (expireAfterSeconds является верхний Собственость уровень)

{ 
    "v" : 1, 
    "key" : { 
     "columnName" : 1 
    }, 
    "expireAfterSeconds" : 172800, 
    "name" : "columnName_1_expireAfterSeconds_172800", 
    "ns" : "dbName.collectionName" 
} 
Смежные вопросы