2014-09-26 10 views
0

Я использую для взаимодействия с mongodb в своем приложении.mongodb TTL не работает над коллекционной недвижимостью - mongojs

Мне нужно добавить поддержку TTL для коллекции, чтобы документы удалялись каждый час. Вот как я создаю индекс на старте приложения:

db.collection.ensureIndex({'createdAt': 1, expireAfterSeconds: 3600}) 

createdAt поле inited в new Date() при сохранении документа.

Вот как структура документов, выглядит в базе данных:

{ 
"_id" : ObjectId("5425759f73070ab82f6097ca"), 
"user" : "bde8349VIO2RpmhE9Rkn3qvQJDYkr589MeWdsopEteQ3OfxQVPxUhLWH0AMiwnypKhquNEG4eA==", 
"tags" : [], 
"createdAt" : ISODate("2014-09-26T14:18:07.041Z") 
} 

Я проверил индексы внутри базы данных, и они выглядят отлично:

> db.collection.getIndexes() 
[ 
{ 
    "v" : 1, 
    "key" : { 
     "_id" : 1 
    }, 
    "name" : "_id_", 
    "ns" : "dbname.collection" 
}, 
{ 
    "v" : 1, 
    "key" : { 
     "createdAt" : 1, 
     "expireAfterSeconds" : 3600 
    }, 
    "name" : "createdAt_1_expireAfterSeconds_3600", 
    "ns" : "dbname.collection" 
} 
] 

Но все документы остаются внутри БД и не удаляются. . Есть идеи?

Спасибо!

+0

Вы можете получить документы, на которые ссылаются индексы? –

+0

@FranciscoCorralesMorales, что вы имеете в виду? – Kosmetika

ответ

2

Это должно быть db.collection.ensureIndex({'createdAt': 1}, {expireAfterSeconds: 3600}), но не db.collection.ensureIndex({'createdAt': 1, expireAfterSeconds: 3600}).

+0

Для тех, кто остановился в течение нескольких секунд, пытаясь определить разницу между обоими утверждениями, разница первая построена правильно, указав 'expireAfterSeconds' как второй вариант создания индекса. –