MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

कैसे डुप्लिकेट कुंजी त्रुटियों को सुरक्षित रूप से insert_many का उपयोग करके अनदेखा करें

आप 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"

यह आपको डुप्लिकेट कुंजी त्रुटियों को अनदेखा करने के लिए एक तंत्र प्रदान करता है, लेकिन निश्चित रूप से किसी ऐसी चीज़ पर ध्यान देना जो वास्तव में एक समस्या है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में सटीक तत्व सरणी में फ़ील्ड अपडेट करें

  2. उल्का के पास कौन से सुरक्षा तंत्र हैं?

  3. MongoDB $weeklyUpdate #65 (अप्रैल 15, 2022):GDELT, Mongoose, और Hackathon Time!

  4. MongooseError [MongooseServerSelectionError]:कनेक्शन <मॉनिटर> से 52.6.250.237:27017 बंद

  5. मोंगोडब उप सरणी के अंदर पाते हैं