Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose在一定时间后从数据库中删除数据_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose在一定时间后从数据库中删除数据

Javascript Mongoose在一定时间后从数据库中删除数据,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,1小时后,我需要删除购物车下数组中的项目 我做了一些研究,但我的尝试对我没有效果 constuserschema=mongoose.Schema({ 电邮:{ 类型:字符串, 验证:[isEmail,'Geçersiz mail address!'], }, 密码:{ 类型:字符串, 必填项:true }, resetToken:String, 有效期:日期, 伊萨明:{ 类型:布尔型, 默认值:false }, 购物车:{ 项目:[{ productId:{ 类型:mongoose.Sche

1小时后,我需要删除购物车下数组中的项目

我做了一些研究,但我的尝试对我没有效果

constuserschema=mongoose.Schema({
电邮:{
类型:字符串,
验证:[isEmail,'Geçersiz mail address!'],
},
密码:{
类型:字符串,
必填项:true
},
resetToken:String,
有效期:日期,
伊萨明:{
类型:布尔型,
默认值:false
},
购物车:{
项目:[{
productId:{
类型:mongoose.Schema.Types.ObjectId,
参考:“产品”,
必填项:true
},
数量:{
类型:数字,
必填项:true
}
}]
}

});我不确定是否还有其他选项,但您可以使用类似的方法,以一定的间隔运行并清理购物车阵列


要使其工作,您需要在DB中有一个额外的字段,它表示到期时间,即(购物车创建时间+1小时)。此节点计划功能将在字段值中检查过期时间,如果该值大于当前时间,则将删除,否则将保持原样。

要更新必须自动更新的部分数据。我确信您不会删除用户详细信息,只想用
[]
null
更新
购物车
数据

为此,您可以在node.js上使用cron作业,该作业每小时触发一次,但它将在指定时间删除所有文档,这可能会导致用户在cron作业运行前1分钟在购物车
中添加内容时出现意外行为

但是,您可以进行查询以检查特定购物车是否过期,并且可以使用cron作业运行该购物车,但我认为,为此,您需要解析每个文档,这可能会增加复杂性和数据库不必要的负担

因此,我建议您创建另一个集合,该集合保存用户购物车信息,并为密钥
createdAt
(您可以随意命名)向集合添加“ttl”,这是由
Mongodb
提供的,它将在特定文档的特定时间过后删除该文档

创建购物车特定集合的索引

db.collectionName.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
插入文档时:

db.log_events.insert( {
   "createdAt": new Date(),
   "logEvent": 2,
   "logMessage": "Success!"
} )
为了彻底理解它,我建议你阅读。

试试看


为手推车保留一个单独的收藏会有所帮助。

这对我来说真的很有用,谢谢。谢谢,如果可行的话,你也可以升级它。