猫鼬在一定时间后删除记录
Mongoose delete records after certain time
我有一个如下所示的猫鼬模式:
const USERS_DATA = new Schema({
_id: Number,
name: String,
img: String,
date: Date,
phone: String,
article: String,
createdAt: {
type: Date,
required: true,
default: Date.now,
index: { expires: '3d' }
}
},
{
collection: "users",
_id: false,
}
);
我需要将数据推送到此模式。
const User = mongoose.model("users", USERS_DATA);
function pushToDB() {
const newUser = new User({
name: INPUT.name,
img: INPUT.img,
date: INPUT.date,
phone: INPUT.phone,
article: INPUT.article,
});
newUser.save(function (err) {
mongoose.disconnect();
if (err) return console.log(err);
});
}
此数据在推送到数据库 3 天后必须删除。如何在node.js中实现?我发现它真的很混乱并尝试了很多代码。任何答案表示赞赏!谢谢
P.S。我用mongoDb图集
您应该将数据推送到数据库的过程与 3 天后删除数据的过程分开。您已经完成了第一部分 :)。
对于第二部分,你可以写一个函数deleteOldDocument
。此函数将查询数据库中创建时间超过 3 天的文档,并删除它们。然后,您可以运行定期执行此功能,例如每天1次。
伪代码,以备不时之需:
async function deleteOldDocument() {
const 3DaysAgo = ...; // here you can subtract 3 days from now to obtain the value
// search for documents that are created from 3 days or more, using $lt operator
const documentToDelete = await User.find({"created_at" : {$lt : 3DaysAgo }});
// delete documents from database
.....
// recall the function after 1 days, you can change the frequence
setTimeOut(async function() {
await deleteOldDocument();
}), 86400);
}
// call deleteOldDocument to start the loop
deleteOldDocument();
我有一个如下所示的猫鼬模式:
const USERS_DATA = new Schema({
_id: Number,
name: String,
img: String,
date: Date,
phone: String,
article: String,
createdAt: {
type: Date,
required: true,
default: Date.now,
index: { expires: '3d' }
}
},
{
collection: "users",
_id: false,
}
);
我需要将数据推送到此模式。
const User = mongoose.model("users", USERS_DATA);
function pushToDB() {
const newUser = new User({
name: INPUT.name,
img: INPUT.img,
date: INPUT.date,
phone: INPUT.phone,
article: INPUT.article,
});
newUser.save(function (err) {
mongoose.disconnect();
if (err) return console.log(err);
});
}
此数据在推送到数据库 3 天后必须删除。如何在node.js中实现?我发现它真的很混乱并尝试了很多代码。任何答案表示赞赏!谢谢
P.S。我用mongoDb图集
您应该将数据推送到数据库的过程与 3 天后删除数据的过程分开。您已经完成了第一部分 :)。
对于第二部分,你可以写一个函数deleteOldDocument
。此函数将查询数据库中创建时间超过 3 天的文档,并删除它们。然后,您可以运行定期执行此功能,例如每天1次。
伪代码,以备不时之需:
async function deleteOldDocument() {
const 3DaysAgo = ...; // here you can subtract 3 days from now to obtain the value
// search for documents that are created from 3 days or more, using $lt operator
const documentToDelete = await User.find({"created_at" : {$lt : 3DaysAgo }});
// delete documents from database
.....
// recall the function after 1 days, you can change the frequence
setTimeOut(async function() {
await deleteOldDocument();
}), 86400);
}
// call deleteOldDocument to start the loop
deleteOldDocument();