MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak usunąć niezweryfikowanego użytkownika za pomocą Mongoose i TTL

Po pierwsze, myślę, że twoja definicja schematu nie jest prawidłowym schematem mangusty. Usunąłem local.type.

Podałem również datę weryfikacjiExpires jako domyślną datę z wygaśnięciem 3 minut, możesz zmienić tę wartość.

Więc schemat musi wyglądać tak:

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

Po drugie, możesz utworzyć indeks bezpośrednio na mongodb.

Oto kroki, które mogę sprawić, by to zadziałało:

1-) Usuń kod związany z indeksem w schemacie użytkownika.

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

2-) Upuść kolekcję użytkowników (rozważ kopię zapasową, jeśli nie chcesz stracić danych)

3-) Utwórz kolekcję użytkowników, używając jakiegoś interfejsu użytkownika, takiego jak MongoDB Compass.

4-) Utwórz ten indeks w mongodb.

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

Spowoduje to wyświetlenie czegoś takiego:

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

5-) Utworzyłem 2 użytkowników w ten sposób:

{
    "_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-) Ręcznie ustawiłem rejestrację użytkownika1Potwierdzono wartość 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-) użytkownik 2 zostanie usunięty po kilku sekundach, gdy weryfikacja wygaśnie.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose przekazuje obiekt do oprogramowania pośredniczącego

  2. Dokument podrzędny Mongoose przed usunięciem oprogramowania pośredniczącego, które nie jest wywoływane

  3. Chcę pobrać wartości wstawione w określonym dniu za pomocą _id of mongodb

  4. Ustaw małe pliki w ShardingTest

  5. Podziel ciąg na tablicę podciągów lub znaków w MongoDB