猫鼬的createIndex

时间:2018-07-15 15:28:22

标签: node.js mongodb mongoose

一个小时后如何从mongo数据库中删除项目?

我见过

whois.ai

抛出来,但是如何在nodejs中实现呢?

我的数据库条目看起来像这样

BeanA

我尝试在db.Item.find()之前为它的get请求运行它,但是没有运气。

5 个答案:

答案 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 分钟后删除,无论我添加了多长时间。