Tamim Fahed نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 أقوم باستخدام mongoose للتعامل مع قاعدة بيانات mongodb، ولقد قمت بإنشاء هيكلية جدول المستخدم كالتالي: var userSchema = new mongoose.Schema({ info: { email : { type: String, require: true, unique: true }, password: { type: String, require:true }, } }); var User = mongoose.model('User',userSchema); module.exports = User; وهذا هو كود إضافة مستند جديد: user({'info.email' : req.body.email, 'info.password' : req.body.password}).save(function(error, result){ if(error) res.send(error); else { res.send({"msg":"saved success"}); } }); ولكن عند الإضافة أحصل على الخطأ التالي: {"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.users.$email_1 dup key: { : null }"} مع العلم أنه ليس لدي أي بيانات متشابهة ضمن المجموعة، كيف يمكنني حل هذه المشكلة؟ اقتباس
0 Sam Ahw نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 بسبب وجود القيد unique على قيمة حقل البريد الالكتروني، تظهر الرسالة بسبب وجود أكثر من مستند له بريد الكتروني فارغ null. فبما أن الحقل مطلوب required وأيضاً فريد، لا يجوز تشابه قيمة هذا الحقل مع مستندات أخرى حتى لو كانت null. حسب التوثيق الرسمي، عند وجود حقل له الخاصية unique وعند عدم إضافة أي قيمة لهذا الحقل يتم حفظ قيمة index له وهي null. والباني الخاص بـ index لهذه المجموعة سيفشل ويعيد الخطأ الذي تمت إعادته في حالتك. لذلك يمكنك إضافة مايدعى بـ sparse index أو المفتاح المتناثر لتطبيق فلتر على القيم الفارغة null، وعدم التسبب في ظهور هذا الخطأ. تطبيق المفتاح index على هذه الحقول وإعطائه القيمة unique يكون بالشكل التالي: users.createIndex( { "info.email": 1 }, { unique: true } ) أما لتطبيق خاصية sparse index فهي بالشكل التالي: users.createIndex( { "info.email": 1 }, { sparse: true } ) وعندها يستطيع sparse index التعامل مع عدة قيم null ولن يحصل الخطأ السابق. 2 اقتباس
السؤال
Tamim Fahed
أقوم باستخدام mongoose للتعامل مع قاعدة بيانات mongodb، ولقد قمت بإنشاء هيكلية جدول المستخدم كالتالي:
var userSchema = new mongoose.Schema({ info: { email : { type: String, require: true, unique: true }, password: { type: String, require:true }, } }); var User = mongoose.model('User',userSchema); module.exports = User;
وهذا هو كود إضافة مستند جديد:
user({'info.email' : req.body.email, 'info.password' : req.body.password}).save(function(error, result){ if(error) res.send(error); else { res.send({"msg":"saved success"}); } });
ولكن عند الإضافة أحصل على الخطأ التالي:
{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.users.$email_1 dup key: { : null }"}
مع العلم أنه ليس لدي أي بيانات متشابهة ضمن المجموعة، كيف يمكنني حل هذه المشكلة؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.