【发布时间】:2020-06-01 21:53:35
【问题描述】:
我在我的节点应用程序中使用MongoDB npm 模块,我有这段代码可以在集合中创建一个带有TTL index 的新对象:
var utcDate = new Date();
var emailObj = {email: emailAddress, createdAt: utcDate};
dbo.collection("initialEmail").createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 });
dbo.collection("initialEmail").insertOne(emailObj, function(err, response) {
...
});
但是,条目总是在大约一分钟后删除(而不是我设置的 1 小时)。
我从我的研究中得知,mongo 运行它的脚本来删除大约每个one minute。这让我觉得由于某种原因我的 mongo 服务器时区与我的节点服务器时区不同,因此使创建的对象的 mongo 过期时间比当前 mongo 服务器时间早一个小时。
对于utcDate变量,我试过了:
new Date( moment.utc().format() );new Date( moment().valueOf() );new Date(Date.now() - new Date().getTimezoneOffset() * 60 * 1000);
但是没有效果。所有这些都使对象在大约 1 分钟后删除。
我也试过了:(对于utcDate)
moment().valueOf();Date.now() - new Date().getTimezoneOffset() * 60 * 1000;
但是这些导致createdAt 在将对象视为 JSON 时的类型为 int,并且该对象永远不会被删除(即使在预期到期后等待了几分钟)。
如何确保插入的对象始终持续至少一个小时?
【问题讨论】:
标签: node.js mongodb timezone momentjs utc