一个小时后如何从mongo数据库中删除项目?
我见过
whois.ai
抛出来,但是如何在nodejs中实现呢?
我的数据库条目看起来像这样
BeanA
我尝试在db.Item.find()之前为它的get请求运行它,但是没有运气。
答案 0 :(得分:3)
两种创建索引的方法。首先
const Schema = mongoose.Schema;
let user = new Schema({
email: {
type: String,
required: true,
index: true //---Index----
});
module.exports = mongoose.model('User', user);
第二种方法
const Schema = mongoose.Schema;
let user = new Schema({
email: {
type: String,
required: true
});
user.index({ email: 1 }); //---Index----
module.exports = mongoose.model('User', user);
在收到警告时执行此操作(我正在使用MongoDB:4.2.8和Mongoose:5.9.20)
DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
然后您可能需要在mongoose.connect中添加'useCreateIndex:true'。
mongoose.connect(Uri, { useNewUrlParser: true, useUnifiedTopology: true,
useCreateIndex: true });
答案 1 :(得分:1)
createIndex
是Mongodb的函数。
在猫鼬中,它已重命名为index
Item.index({ "createdAt": 1 }, { expireAfterSeconds: 3600 })
答案 2 :(得分:0)
以防万一有人遇到这个问题,我正在使用mlab,并且在数据库中使用了“索引”选项卡。我刚刚添加了
{ "createdAt": 1 }
,然后从复选框中选择TTL,然后以秒为单位添加我的时间。
答案 3 :(得分:0)
我刚刚经历了这一步,我想强调确切的解决方案:
猫鼬模式:
const Schema = mongoose.Schema;
const tokenSchema = new Schema({
id: String,
userId: String,
createdAt: { type: Date, expires: 30, default: Date.now } // expires in 30 seconds
});
重要提示:
mongod
服务每分钟运行一次,因此有可能在近一分钟之内不会删除该记录。
答案 4 :(得分:0)
好的,所以其他解决方案都不适合我(2021 年 5 月)
不过,下面的代码做到了。它涉及将 expireAt 字段设置为您希望删除它的实际时间,这确实很有意义。
const Schema = mongoose.Schema;
const YourSchema = new Schema({
expireAt: {
type: Date,
default: Date.now() + 10 * 60 * 1000 // expires in 10 minutes
},
});
这是唯一有效的方法,我尝试过的所有其他解决方案总是在 1 分钟后删除,无论我添加了多长时间。