सबसे पहले, मुझे लगता है कि आपकी स्कीमा परिभाषा मान्य नेवला स्कीमा नहीं है। मैंने 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 को कुछ सेकंड के बाद हटा दिया जाता है जब सत्यापन समाप्त हो जाता है।