如何在Node中使用Mongoose在一定时间后自动删除MongoDB数据js?

nbewdwxp  于 2023-04-30  发布在  Go
关注(0)|答案(2)|浏览(164)

我使用MongoDB数据库创建了一个时间序列集合,我希望数据会在2分钟后自动删除,但它没有发生。我检查了数据库,发现数据仍然存在。
我使用MongoDB数据库创建了一个time-series集合,我需要在2分钟后删除nonce字段中的数据。我使用MongoDB Compass创建了它,参数如下:

但是,当我在node中使用mongoose插入数据时。js,2分钟后数据不删除。
下面是我使用的代码:

const nonceSchema = new mongoose.Schema({
    nonce: String,
    ts: Date,
})

const nonceModel = mongoose.model('nonce', nonceSchema,'nonce');

await nonceModel.create({
        nonce: nonce,
        ts: new Date(),
    });

这段代码正确地插入数据,但不会自动删除数据。

[{
  "ts": {
    "$date": "2023-04-29T06:28:21.345Z"
  },
  "nonce": "R8tYOm15zEu1BupI",
  "_id": {
    "$oid": "644cb90554447c607a4a5a37"
  },
  "__v": 0
},{
  "ts": {
    "$date": "2023-04-29T06:28:47.098Z"
  },
  "nonce": "fFHGD8h6LwUDFIWo",
  "_id": {
    "$oid": "644cb91f54447c607a4a5a3b"
  },
  "__v": 0
}]

我该怎么办?谢谢你的帮助。

zfciruhq

zfciruhq1#

解决方案:将nonce创建为常规集合,而不是time series,并将以下代码添加到JavaScript中:

const nonceSchema = new mongoose.Schema({
    nonce: String,
    ts: Date,
})
// add this code
nonceSchema.index({ ts: 1 }, { expireAfterSeconds: 120 });
const nonceModel = mongoose.model('nonce', nonceSchema,'nonce');

await nonceModel.create({
        nonce: nonce,
        ts: new Date(),
    });
e0uiprwp

e0uiprwp2#

在向集合中插入数据之前,需要创建TTL索引。如果在插入数据后创建TTL索引,则不会根据TTL索引自动删除现有数据。

相关问题