2011-05-09 20 views
8

मैं अपने एएसपीनेट एप्लिकेशन के लिए एक मोंगो डीबी समर्थित प्रमाणीकरण मॉड्यूल पर काम कर रहा हूं। MongoDB डेटाबेस में ऐसे उपयोगकर्ताओं का संग्रह है जहां मैं लॉगिन जानकारी संग्रहीत करता हूं - उपयोगकर्ता नाम, ईमेल और पासवर्ड। दोनों उपयोगकर्ता नाम और ईमेल अद्वितीय होने की तैयारी में हैं:MongoDB अपवादों को संभालने के बेहतर तरीके

users.ensureIndex({email:1}, {unique:1}) 
users.ensureIndex({uname:1}, {unique:1}) 

अब, अगर मैं मौजूदा uname या ईमेल के साथ एक रिकॉर्ड डालने के लिए प्रयास करते हैं, मैं एक MongoDB अपवाद:

Safemode detected an error: E11000 duplicate key error index: 
authdb.users.$email_1 dup key: { : "[email protected]" } 
(response: { "err" : "E11000 duplicate key error index: authdb.users.$email_1 
dup key: { : \"[email protected]\" }", "code" : 11000, "n" : 0, "connectionId" : 9, 
"ok" : 1.0 }) 

मैं बताने की आवश्यकता उपयोगकर्ता जो उपयोगकर्ता नाम या ईमेल दर्ज कर चुके हैं, वे पहले से मौजूद हैं, लेकिन पूरा अपवाद केवल पाठ का एक ब्लॉब है, और यह देखने के लिए कि मुझे क्या चल रहा है यह देखने के लिए मुझे "$ ईमेल" या "$ uname" त्रुटि संदेश पाठ में है या नहीं । क्या मोंगोडीबी अपवादों के लिए कुछ प्रकार का पार्सर है जो मुझे यह जानने में मदद करेगा कि अपवाद क्या है?

उत्तर

7

मैंने मोंगोडीबी के बग ट्रैकर में डुप्लिकेट कुंजी त्रुटियों पर getLastError के आउटपुट में अतिरिक्त फ़ील्ड जोड़ने के लिए एक सुविधा अनुरोध बनाया है। कृपया https://jira.mongodb.org/browse/SERVER-3069 पर इसके लिए वोट दें।

जब तक यह लागू नहीं किया जाता है, आपके उपयोग के मामले में आप केवल यह जांच सकते हैं कि त्रुटि स्ट्रिंग में या तो "ईमेल" या "अनम" है और उस दस्तावेज़ से डुप्लिकेट मान पुनर्प्राप्त करें जिसे आपने अभी डालने का प्रयास किया था। यह उतना ही सुरुचिपूर्ण नहीं है जितना हो सकता है, लेकिन इसे अभी काम करना चाहिए।

1
C# MongoDB ड्राइवर 1.xa डुप्लिकेट के साथ

के साथ इतना

try 
{ 
    collection.Insert(doc); 
} 
catch (MongoWriteConcernException ex) 
{ 
    if (ex.Code == 11000) 
     throw new YourConflictException("User already exists for username and/or email"); 
    else 
     throw ex; 
} 

की तरह पता लगाया जा सकता C# MongoDB ड्राइवर 2.x https://stackoverflow.com/a/30309874/516748

देख लेकिन अगर आप जानना चाहते हैं कि वास्तव में कौन नकली चाबी आप की आवश्यकता हो सकती पाठ को पार्स करने के लिए

+1

क्या यहां एक अच्छा अभ्यास माना जाता है? अगर हमें कोशिश करने की कोशिश है तो क्या हमें एसिंक्रोनस डालने का उपयोग करना चाहिए? – AdamMc331

संबंधित मुद्दे