【问题标题】:expireAfterSeconds doesnt work mongoexpireAfterSeconds 不起作用 mongo
【发布时间】:2016-09-07 12:48:02
【问题描述】:

使用 Mongo 3.2

我将 expireAfterSeconds 设置为 3 天,因为我们不需要此集合中超过 3 天的数据,但我可以在数据库中看到,我们仍然有一个月前的数据。是不是配置有问题。

从 db.runs.getIndexes() 收集的信息

{
   "v" : 1,
   "key" : {
      "_id" : 1
    },
   "name" : "_id_",
   "ns" : "guardian.runs"
},
{
   "v" : 1,
   "key" : {
     "created" : 1
   },
   "name" : "created_1",
   "ns" : "guardian.runs",
   "background" : true,
   "expireAfterSeconds" : 259200
}

应该删除的条目:

 [
   {
     "_id": "578c8aa25a3f72387073f2f0",
     "job_id": "573f62bf0e44a2796b6e9de1",
     "owner": null,
     "started": "2016-07-18T07:52:02.447Z",
     "ended": "2016-07-18T07:52:14.119Z",
     "status": "success",
     "result": {
       "success": [],
       "fail": [],
       "warning": []
     }
   }
]

【问题讨论】:

  • 添加了一项
  • 您的文档没有您的 TTL 索引引用的 created 字段。
  • 所以如果我将 created 更改为 end,它应该可以工作吗?
  • 可以,只要ended 是一个实际的日期数据类型,而不仅仅是一个字符串。

标签: mongodb mongodb-indexes


【解决方案1】:

您的文档没有您的TTL index 引用的created 字段。

您需要在创建每个文档时将 created 字段添加到您的文档中,或者更改您的 TTL 索引以引用 startedended 代替(假设这些实际上是数据库中的日期值和不仅仅是字符串)。

【讨论】:

    猜你喜欢
    • 2018-11-05
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多