2016-12-02 2 views
-1

Можете ли вы TTL разреженное поле? Если да, следует ли объявлять индекс TTL разреженным? Вот так?MongoDB TTL редкий индекс?

db.eventlog.createIndex({ "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 , sparse:"true"}) 
+0

Лучший вопрос: лучше ли это, когда индекс разрежен? Мне непонятно, прочитав документацию по TTL и разреженным индексам: / – mjaskowski

ответ

1
> use foo 
switched to db foo 
> db.foo.createIndex({date: 1}, {expireAfterSeconds: 5, sparse: true}) 
{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "numIndexesAfter" : 2, 
    "ok" : 1 
} 

> db.foo.getIndexes() 
[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "foo.foo" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "date" : 1 
     }, 
     "name" : "date_1", 
     "ns" : "foo.foo", 
     "expireAfterSeconds" : 5, 
     "sparse" : true 
    } 
] 

> db.foo.insert({date: new Date()}) 

> db.foo.find() 
{ "_id" : ObjectId("5841aeb650b5412e92ebbb9b"), "date" : ISODate("2016-12-02T17:26:14.617Z") } 

> db.foo.find() 
> 

Оказывается, что это работало нормально. Обратите внимание, что согласно documentation операция TTL срабатывает каждые 60 секунд или около того, поэтому срок действия expireAfterSeconds: 5 может занять больше времени.

Смежные вопросы