为什么我不能从db.my_collection.getIndex()输出中看到TTL?

时间:2016-07-12 13:02:44

标签: ruby mongodb

我设置了expireAfterSeconds的索引。当db.my_collection.getIndexes()的输出仅显示以下内容时,如何使用CLI确认:

{
  "v": 1,
  "key": {
    "last_used_at": 1
  },
  "name": "last_used_at_1",
  "ns": "cms.user_sessions"
}

它看起来就像没有设置expireAfterSeconds的普通索引。

如何确认使用expireAfterSeconds创建索引?

这是创建索引的Ruby代码。我已经尝试删除索引并使用此代码重新创建它几次。

@user_sessions.indexes.create_many([
  {key: {token: 1}, unique: true},
  {key: {last_used_at: 1}, expireAfterSeconds: ttl}
])

版本信息:

$ mongod --version
db version v2.6.5
2016-07-13T16:11:45.844+0200 git version: e99d4fcb4279c0279796f237aa92fe3b64560bf6

$ gem list | grep mongo
mongo (2.2.5)

1 个答案:

答案 0 :(得分:1)

您的索引存在问题,请尝试删除它并重新创建。

设置TTL后,您将从db.name.getIndexes()命令

获取
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.eventlog"
    },
    {
        "v" : 1,
        "key" : {
            "lastModifiedDate" : 1.0
        },
        "name" : "lastModifiedDate_1",
        "ns" : "test.eventlog",
        "expireAfterSeconds" : 3600.0
    }
]