MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara menghapus pengguna yang tidak terverifikasi dengan Mongoose dan TTL

Pertama, saya pikir definisi skema Anda bukan skema luwak yang valid. Saya menghapus local.type.

Saya juga memberikan tanggal verifikasiKedaluwarsa tanggal default dengan kedaluwarsa 3 menit, Anda dapat mengubah nilai itu.

Jadi skemanya harus seperti ini:

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);

Kedua, Anda dapat membuat indeks di mongodb secara langsung.

Berikut adalah langkah-langkah yang saya dapat membuatnya bekerja:

1-) Hapus kode terkait indeks dalam skema pengguna.

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

2-) Jatuhkan koleksi pengguna (pertimbangkan cadangan jika Anda tidak ingin kehilangan data)

3-) Buat koleksi pengguna menggunakan beberapa gui seperti MongoDB Compass.

4-) Buat indeks ini di mongodb.

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

Ini akan menampilkan sesuatu seperti ini:

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

5-) Saya membuat 2 pengguna seperti ini:

{
    "_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-) Saya secara manual mengatur pendaftaran pengguna1 Dikonfirmasi menjadi benar:

{
    "_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-) pengguna2 dihapus setelah beberapa detik saat verifikasi Berakhir.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dasar antara kueri tanggal $gte, $lte, dll

  2. luwak agregat cara memetakan beberapa koleksi menjadi satu Array

  3. Menyimpan System.Type dengan MongoDb

  4. Basis Data MongoDB, setara untuk SELECT column1, column2 FROM tbl

  5. node paspor Kesalahan:Strategi otentikasi tidak dikenal masuk-lokal