我有下面的Mongoose模型,我希望在2分钟后自动删除。不幸的是,自动删除功能不起作用。注意,我希望将created_at字段保留为以毫秒为单位的Number,而不是日期。我如何着手让下面的代码为我工作。
const mongoose = require("mongoose");
const TokenSchema = new mongoose.Schema(
{
_id: mongoose.Schema.Types.ObjectId,
token: String,
deleted: Boolean,
deleted_at: Number,
created_at: { type: Number, expires: '2m', default: new Date().getTime() },//Auto-Delete after 2minutes
updated_at: Number,
}
);
TokenSchema.pre('save', function (next) {
let shadow = this;
let now = new Date().getTime();
shadow.updated_at = now;
if (!shadow.created_at) {
shadow.created_at = now;
}
next();
});谢谢
发布于 2021-08-26 16:20:30
Mongoose使用MongoDB TTL Indexes使文档过期,它只对包含日期或日期值数组的字段起作用。
如果文档的索引字段包含任何其他类型,它将不会自动过期,因此要使自动过期起作用,您需要让created_at存储type: Date。
mongo在内部将日期存储为自纪元以来的毫秒数,您可以使用valueOf()方法提取它,并且MongoDB查询语言允许通过传递毫秒数来查询日期字段。
https://stackoverflow.com/questions/68941433
复制相似问题