【问题标题】:MongoDB - Updating TTL Index valueMongoDB - 更新 TTL 索引值
【发布时间】:2020-04-28 12:32:52
【问题描述】:

我正在尝试更新文档中到期日期的值。这是我每次想要更新文档时用来设置索引的 Node.js 代码:

database.collection(collectionName).createIndex({ "expires_on": 1 }, { expireAfterSeconds: 0 })
database.collection(collectionName).updateOne(query, update, { upsert: true }, (error, result) => {...})

问题是我将 expires_on 日期设置为明天的日期,并且该值在数据库中设置正确,但它会在几秒钟内过期。我更新此字段的方式有问题吗?我不知道如何更新此文档,使其在上次更新的 expires_on 日期过期。

我注意到您无法更新 MongoDB 中的索引,但我要在此处更新索引吗?当我尝试更改值而不是索引本身时,它不是不同吗?

【问题讨论】:

    标签: mongodb mongodb-query ttl mongodb-indexes mongodb-update


    【解决方案1】:

    你已经理解了 ttl index 有点奇怪的方式...... 在您的代码示例中,您将每个具有时间戳列“expires_on”的文档设置为立即过期(expireAfterSeconds:0)。

    过期进程在后台运行,如果将 expireAfterSeconds 设置为 0,它将找出所有 "expires_on" 值小于或等于 now() 的文档。

    因此,您对字段“expires_on”的更新必须发生在“now() -lt expires_on”的时刻。

    最好说 f.ex。 “expireAfterSeconds: 3600”,然后将 expires_on 更新为“明天减去 3600 秒”的值...

    【讨论】:

      【解决方案2】:

      每次插入新数据时我都创建索引的事实是不合逻辑的。我在数据库中设置了一次索引,每次只更新文档:

      database.collection(collectionName).updateOne(query, update, { upsert: true }, (error, result) => {...})
      

      但是,问题出在我在代码中为 expires_on 设置的值上。由于 Node.js 的异步性,该值计算不正确。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        • 2019-09-23
        • 1970-01-01
        • 2017-10-13
        相关资源
        最近更新 更多