MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách xóa người dùng chưa được xác minh bằng Mongoose và TTL

Đầu tiên, tôi nghĩ rằng định nghĩa giản đồ của bạn không phải là một lược đồ mongoose hợp lệ. Tôi đã xóa local.type.

Ngoài ra, tôi đã đặt ngày verifyExpires là ngày mặc định với thời gian hết hạn là 3 phút, bạn có thể thay đổi giá trị đó.

Vì vậy, lược đồ phải như thế này:

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  local: new mongoose.Schema({
    email: { type: String, unique: true, required: true },
    name: { type: String, required: true },
    password: { type: String, required: true },
    resetPasswordToken: String,
    resetPasswordExpires: Date,
    verificationToken: String,
    verificationExpires: {
      type: Date,
      default: () => new Date(+new Date() + 3 * 60 * 1000) //3 minutes
    },
    registrationConfirmed: {
      type: Boolean,
      default: false
    }
  }),
  google: {
    id: String,
    name: String,
    email: String
  },
  accountType: String
});

module.exports = mongoose.model("User", userSchema);

Thứ hai, bạn có thể tạo chỉ mục trên mongodb trực tiếp.

Dưới đây là các bước tôi có thể làm cho nó hoạt động:

1-) Xóa mã liên quan đến chỉ mục trong lược đồ người dùng.

userSchema.index(
  { 'local.verificationExpires': 1 },
  {
    expireAfterSeconds: 0,
    partialFilterExpression: { 'local.registrationConfirmed': false }
  }
);

2-) Thả bộ sưu tập người dùng (cân nhắc sao lưu nếu bạn không muốn mất dữ liệu)

3-) Tạo tập hợp người dùng bằng một số gui như MongoDB Compass.

4-) Tạo chỉ mục này trong mongodb.

db.users.createIndex(
    { 'local.verificationExpires': 1 },
    {
        expireAfterSeconds: 0,
        partialFilterExpression: { 'local.registrationConfirmed': false }
    }
)

Điều này sẽ xuất ra một cái gì đó như thế này:

{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

5-) Tôi đã tạo 2 người dùng như thế này:

{
    "_id" : ObjectId("5def4f0499dc104620a3310b"),
    "local" : {
        "registrationConfirmed" : false,
        "_id" : ObjectId("5def4f0499dc104620a3310c"),
        "email" : "[email protected]",
        "name" : "user2",
        "password" : "123123",
        "verificationExpires" : ISODate("2019-12-10T10:56:40.884+03:00")
    },
    "__v" : 0
}

{
    "_id" : ObjectId("5def4eff99dc104620a33109"),
    "local" : {
        "registrationConfirmed" : false,
        "_id" : ObjectId("5def4eff99dc104620a3310a"),
        "email" : "[email protected]",
        "name" : "user1",
        "password" : "123123",
        "verificationExpires" : ISODate("2019-12-10T10:56:35.385+03:00")
    },
    "__v" : 0
}

6-) Tôi đặt đăng ký của user1 theo cách thủ công. Đã xác nhận thành true:

{
    "_id" : ObjectId("5def4eff99dc104620a33109"),
    "local" : {
        "registrationConfirmed" : true,
        "_id" : ObjectId("5def4eff99dc104620a3310a"),
        "email" : "[email protected]",
        "name" : "user1",
        "password" : "123123",
        "verificationExpires" : ISODate("2019-12-10T10:56:35.385+03:00")
    },
    "__v" : 0
}

7-) user2 bị xóa sau vài giây khi quá trình xác minh Hết hạn được thông qua.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kiểm tra sự tồn tại của nhiều trường trong tài liệu MongoDB

  2. Chuyển đổi giữa JPA và Mongo trong ứng dụng Spring Boot MVC

  3. Làm cách nào để lấy một tài liệu nhúng cụ thể bên trong bộ sưu tập MongoDB?

  4. Những cân nhắc cơ bản khi sao lưu MongoDB

  5. Làm cách nào để định cấu hình mongo chạy trong docker để sử dụng ổ đĩa ngoài trên windows