आप BulkWriteError
. के साथ उत्पन्न त्रुटियों का निरीक्षण करके इससे निपट सकते हैं . यह वास्तव में एक "ऑब्जेक्ट" है जिसमें कई गुण हैं। दिलचस्प भाग details
में हैं :
import pymongo
from bson.json_util import dumps
from pymongo import MongoClient
client = MongoClient()
db = client.test
collection = db.duptest
docs = [{ '_id': 1 }, { '_id': 1 },{ '_id': 2 }]
try:
result = collection.insert_many(docs,ordered=False)
except pymongo.errors.BulkWriteError as e:
print e.details['writeErrors']
पहली बार चलाने पर, यह e.details['writeErrors']
के अंतर्गत त्रुटियों की सूची देगा :
[
{
'index': 1,
'code': 11000,
'errmsg': u'E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }',
'op': {'_id': 1}
}
]
दूसरी बार चलाने पर, आपको तीन त्रुटियाँ दिखाई देती हैं क्योंकि सभी आइटम मौजूद थे:
[
{
"index": 0,
"code": 11000,
"errmsg": "E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }",
"op": {"_id": 1}
},
{
"index": 1,
"code": 11000,
"errmsg": "E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }",
"op": {"_id": 1}
},
{
"index": 2,
"code": 11000,
"errmsg": "E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 2 }",
"op": {"_id": 2}
}
]
तो आपको केवल "code": 11000
. के साथ प्रविष्टियों के लिए सरणी को फ़िल्टर करने की आवश्यकता है और तब केवल "घबराहट" होती है जब वहां कुछ और होता है
panic = filter(lambda x: x['code'] != 11000, e.details['writeErrors'])
if len(panic) > 0:
print "really panic"
यह आपको डुप्लिकेट कुंजी त्रुटियों को अनदेखा करने के लिए एक तंत्र प्रदान करता है, लेकिन निश्चित रूप से किसी ऐसी चीज़ पर ध्यान देना जो वास्तव में एक समस्या है।