MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Mongoose और TTL के साथ असत्यापित उपयोगकर्ता को कैसे निकालें

सबसे पहले, मुझे लगता है कि आपकी स्कीमा परिभाषा मान्य नेवला स्कीमा नहीं है। मैंने local.type हटा दिया है।

इसके अलावा मैंने सत्यापन की तारीख को 3 मिनट की समाप्ति के साथ एक डिफ़ॉल्ट तिथि दी है, आप उस मान को बदल सकते हैं।

तो स्कीमा इस तरह होनी चाहिए:

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

दूसरे, आप सीधे मोंगोडब पर इंडेक्स बना सकते हैं।

यहां वे चरण दिए गए हैं जिनसे मैं इसे काम कर सकता हूं:

1-) उपयोगकर्ता स्कीमा में अनुक्रमणिका संबंधित कोड निकालें।

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

2-) उपयोगकर्ता संग्रह छोड़ें (यदि आप डेटा खोना नहीं चाहते हैं तो बैकअप पर विचार करें)

3-) कुछ gui जैसे MongoDB Compass का उपयोग करके एक उपयोगकर्ता संग्रह बनाएं।

4-) इस इंडेक्स को मोंगोडब में बनाएं।

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

यह कुछ इस तरह आउटपुट करेगा:

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

5-) मैंने इस तरह 2 उपयोगकर्ता बनाए:

{
    "_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-) मैं मैन्युअल रूप से user1 के पंजीकरण को सही पर पुष्टि करता हूं:

{
    "_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 को कुछ सेकंड के बाद हटा दिया जाता है जब सत्यापन समाप्त हो जाता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoosastic - {[त्रुटि:कोई जीवित कनेक्शन नहीं] संदेश:'कोई जीवित कनेक्शन नहीं'}

  2. केवल एक ही संपत्ति लौटाएं _id

  3. mongoose.model में संग्रह का नाम कैसे बदलें?

  4. साइगविन पर मोंगोडीबी सी ++ ड्राइवर संकलित करना

  5. मोंगो अज्ञात मूल कुंजी के साथ मूल्य पाते हैं