代码之家  ›  专栏  ›  技术社区  ›  Manuel

MongoDB TTL索引的排序方向重要吗?

  •  2
  • Manuel  · 技术社区  · 5 年前

    db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )
    

    db.eventlog.createIndex( { "lastModifiedDate": -1 }, { expireAfterSeconds: 3600 } )
    

    ?

    docs

    0 回复  |  直到 5 年前
        1
  •  4
  •   Valijon    5 年前

    没关系。


    TTL的工作原理

    //find the expireAfterSeconds value from collection indexes
    var expireAfterSeconds = db.eventlog.getIndexes().filter(function(i){
        return i.hasOwnProperty('expireAfterSeconds');
    })[0].expireAfterSeconds;
    
    // epoch time
    var startTime = new Date(1970,0,1);
    // end time
    var endTime = new Date(Date.now() - expireAfterSeconds*3600);
    db.eventlog.remove({lastModifiedDate: { $gt: startTime, $lte: endTime }});
    

    参考: ttl.cpp source

    http://hassansin.github.io/working-with-mongodb-ttl-index

        2
  •  0
  •   HbnKing    5 年前

    排序顺序刚好 影响查询结果顺序

    TTL索引在指定的秒数之后使文档过期 索引字段值加上指定的秒数。

    因此,在您的条件下,它们对于TTL索引是相同的。

    顺便说一句使用TTL索引时,文档会立即删除

    删除过期文档的后台任务每60分钟运行一次 从文档到期到运行 后台任务