Node.js 在一定时间后自动删除mongo DB中的文档

Node.js 在一定时间后自动删除mongo DB中的文档,node.js,mongodb,Node.js,Mongodb,我需要一个解决方案,在一定时间后自动删除mongo DB表中的文档。 我在这段代码中有一些bug。即使我指定过期时间为2分钟,它也会删除早于2分钟的文档 我的代码: var mongoose = require("mongoose"); var loginSchema = new mongoose.Schema( /*{ expire_at: { type: Date, default: Date.now, expires: 60 } },*/ { email: {

我需要一个解决方案,在一定时间后自动删除mongo DB表中的文档。 我在这段代码中有一些bug。即使我指定过期时间为2分钟,它也会删除早于2分钟的文档

我的代码:

var mongoose = require("mongoose");

var loginSchema = new mongoose.Schema(
  /*{
    expire_at: { type: Date, default: Date.now, expires: 60 }
  },*/
  {
    email: {
      type: String,
      require: true,
      min: 6,
      max: 255,
      match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
    },
    password: {
      type: String,
      require: true,
      max: 1024,
      min: 6
    },
    latitude: {
      type: String,
      require: true
    },
    longitude: {
      type: String,
      require: true
    },
    IPAddress: {
      type: String,
      require: true
    },
    ISP: {
      type: String,
      require: true
    },
    Location: {
      type: String,
      require: true
    },
    isMobile: {
      type: Boolean
    },
    MobileDeviceID: {
      type: String
    },
    date: {
      type: Date,
      default: Date.now
    },
    expireAt: { 
      type: Date, 
      default: Date.now,
      index: { expires: '2m' }
    }
  }
);

module.exports = mongoose.model("Login", loginSchema);

您可以使用MongoDB开箱即用提供的
生存时间(TTL)索引。TTL通过后,它会自动使数据过期,然后根据MongoDB文档将其从集合中删除

TTL索引是一种特殊的单字段索引,MongoDB可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。数据过期对于某些类型的信息非常有用,如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保留有限的时间

所以你需要像这样创建一个TTL索引

loginSchema.createIndex({“expire_at:1},{expireAfterSeconds:5})

删除过期文档的后台任务每60秒运行一次。因此,在文档到期和后台任务运行之间的时间段内,文档可能会保留在集合中


希望这有帮助

您可以使用MongoDB提供的现成的
生存时间(TTL)索引。TTL通过后,它会自动使数据过期,然后根据MongoDB文档将其从集合中删除

TTL索引是一种特殊的单字段索引,MongoDB可以使用它在一定时间或特定时钟时间后自动从集合中删除文档。数据过期对于某些类型的信息非常有用,如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保留有限的时间

所以你需要像这样创建一个TTL索引

loginSchema.createIndex({“expire_at:1},{expireAfterSeconds:5})

删除过期文档的后台任务每60秒运行一次。因此,在文档到期和后台任务运行之间的时间段内,文档可能会保留在集合中


希望这有帮助

这能回答您的问题吗?这回答了你的问题吗?这正是上面提供的重复链接中的一个答案所说的,请将问题标记为重复,而不是重复答案!!这正是上面提供的重复链接中的一个答案所说的,请将问题标记为重复,而不是重复答案!!