MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara Mengabaikan Kesalahan Kunci Duplikat dengan Aman Menggunakan insert_many

Anda dapat mengatasinya dengan memeriksa kesalahan yang dihasilkan dengan BulkWriteError . Ini sebenarnya adalah "objek" yang memiliki beberapa properti. Bagian yang menarik ada di 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']

Saat pertama kali dijalankan, ini akan memberikan daftar kesalahan di bawah e.details['writeErrors'] :

[
  { 
    'index': 1,
    'code': 11000, 
    'errmsg': u'E11000 duplicate key error collection: test.duptest index: _id_ dup key: { : 1 }', 
    'op': {'_id': 1}
  }
]

Saat dijalankan kedua, Anda melihat tiga kesalahan karena semua item ada:

[
  {
    "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}
   }
]

Jadi yang perlu Anda lakukan hanyalah memfilter larik untuk entri dengan "code": 11000 dan kemudian hanya "panik" ketika ada sesuatu yang lain di sana

panic = filter(lambda x: x['code'] != 11000, e.details['writeErrors'])

if len(panic) > 0:
  print "really panic"

Itu memberi Anda mekanisme untuk mengabaikan kesalahan kunci duplikat tetapi tentu saja memperhatikan sesuatu yang sebenarnya menjadi masalah.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Melewati parameter model ke model luwak

  2. MongoDB:Memperbarui subdokumen

  3. MongoDB, Mongoose:Bagaimana menemukan subdokumen dalam dokumen yang ditemukan?

  4. Cara menggunakan $regex dalam kueri agregasi mongodb dalam $match

  5. MongoDB vs MySQL