我将到期时间设置为24小时,但是文档在5到10分钟后过期(我没有为它计时)。我究竟做错了什么?我的架构:
const collectionSchema = new mongoose.Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
name: {
type: String,
maxLength: 30,
required: true
},
entries: [{ type: mongoose.Schema.Types.ObjectId, ref: "Entry" }],
expireAt: { type: Date, expires: 60 * 60 * 24 }
});
在发布路线中,我有条件地设置了日期,以便登录的客户端获得数据持久性。
router.post("/", auth, async (req, res) => {
let date = null;
if (!req.user) {
date = new Date();
}
try {
const collection = {
userId: req.body.userId,
name: req.body.name,
expireAt: date
};
const newCollection = await Collection.create(collection);
res.send(newCollection);
} catch (error) {
res.send(error.message);
}
});
我以为我遇到了时区问题,但是当我在MongoDB指南针中检查时间戳时,它与我的时区匹配。我在做什么错了?
答案 0 :(得分:1)
我对此进行了测试:
var TestSchema = new Schema({
name: String,
createdAt: { type: Date, expires: '2m', default: Date.now }
});
第二分钟后删除了文档商品,我还确认已正确创建TTL索引(默认为背景索引),且TTL为120
秒。
尝试使用该时间格式,看看是否适合您。
还请注意,直到您的mongo模式对索引的任何预期更改都不会反映出来, 您手动删除上一个索引并启动您的应用 自动创建新的。
MongoDB版本: 3.6.5