MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách tiếp tục chèn sau lỗi trùng lặp khóa bằng PyMongo

Bạn cần sử dụng insert_many và đặt tùy chọn được sắp xếp thành False .

db_stock.insert_many(<list of documents>)

Như đã đề cập trong đã đặt hàng tài liệu tùy chọn:

đã đặt hàng (tùy chọn):Nếu True (mặc định), các tài liệu sẽ được chèn vào máy chủ theo thứ tự được cung cấp. Nếu xảy ra lỗi, tất cả các lần chèn còn lại sẽ bị hủy bỏ. Nếu Sai, tài liệu sẽ được chèn trên máy chủ theo thứ tự tùy ý, có thể song song và tất cả các thao tác chèn tài liệu sẽ được cố gắng thực hiện.

Điều đó có nghĩa là quá trình chèn sẽ tiếp tục ngay cả khi có lỗi khóa trùng lặp.

Demo:

>>> c.insert_many([{'_id': 2}, {'_id': 3}])
<pymongo.results.InsertManyResult object at 0x7f5ca669ef30>
>>> list(c.find())
[{'_id': 2}, {'_id': 3}]
>>> try:
...     c.insert_many([{'_id': 2}, {'_id': 3}, {'_id': 4}, {'_id': 5}], ordered=False)
... except pymongo.errors.BulkWriteError:
...     list(c.find())
... 
[{'_id': 2}, {'_id': 3}, {'_id': 4}, {'_id': 5}]

Như bạn có thể thấy tài liệu với _id 4, 5 đã được chèn vào bộ sưu tập.

Cần lưu ý rằng điều này cũng có thể xảy ra trong shell bằng cách sử dụng insertMany phương pháp. Tất cả những gì bạn cần là đặt tùy chọn không có giấy tờ ordered thành false .

db.collection.insertMany(
    [ 
        { '_id': 2 }, 
        { '_id': 3 },
        { '_id': 4 }, 
        { '_id': 5 }
    ],
    { 'ordered': false }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB năm 2018 - Một năm được đánh giá

  2. phép chiếu không hoạt động với truy vấn tìm

  3. Tạo bộ sưu tập Meteor mới một cách nhanh chóng

  4. Tùy chỉnh deserialization

  5. Node + Mongoose:Lấy ID được chèn lần cuối?