मेरे पास भी बस यही मुद्दा था। मैं चाहता था कि एक मूल्य या तो शून्य हो या अद्वितीय हो। इसलिए, मैंने दोनों को unique
. सेट किया है और sparse
झंडे:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
और, मैंने सुनिश्चित किया कि डेटाबेस ने वास्तव में db.users.getIndexes();
के साथ इंडेक्स को सही ढंग से बनाया है।
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(तो, यह नहीं . है यहाँ समस्या के समान ही:mongo _id फ़ील्ड डुप्लिकेट कुंजी त्रुटि )
मेरी गलती default
. सेट कर रही थी मान null
. कुछ अर्थों में, Mongoose एक स्पष्ट null
. को गिनता है एक मूल्य के रूप में जो अद्वितीय होना चाहिए। यदि फ़ील्ड कभी परिभाषित नहीं है (या undefined
) तो इसे अद्वितीय होने के लिए लागू नहीं किया जाता है।
email: {type: String, trim: true, unique: true, sparse: true},
इसलिए, यदि आपको भी यह समस्या हो रही है, तो सुनिश्चित करें कि आप डिफ़ॉल्ट मान सेट नहीं कर रहे हैं, और सुनिश्चित करें कि आप मानों को null
पर सेट नहीं कर रहे हैं आपके कोड में कहीं और भी। इसके बजाय, यदि आपको इसे स्पष्ट रूप से सेट करने की आवश्यकता है, तो इसे undefined
पर सेट करें (या एक अद्वितीय मूल्य)।