Cập nhật hàng loạt MongoDB

Hướng dẫn này giải thích cách tận dụng các tính năng thao tác ghi hàng loạt của PyMongo. Thực hiện các thao tác ghi theo lô giúp giảm số lượng vòng lặp mạng, tăng thông lượng ghi

Chèn hàng loạt

Mới trong phiên bản 2. 6

Có thể chèn một loạt tài liệu bằng cách chuyển danh sách tới phương thức. PyMongo sẽ tự động chia lô thành các lô nhỏ hơn dựa trên kích thước thư tối đa được MongoDB chấp nhận, hỗ trợ các hoạt động chèn số lượng lớn rất lớn

>>> import pymongo
>>> db = pymongo.MongoClient().bulk_example
>>> db.test.insert_many([{'i': i} for i in range(10000)]).inserted_ids
[...]
>>> db.test.count_documents({})
10000

Hoạt động ghi hàng loạt hỗn hợp

Mới trong phiên bản 2. 7

PyMongo cũng hỗ trợ thực hiện các thao tác ghi hàng loạt hỗn hợp. Một loạt thao tác chèn, cập nhật và xóa có thể được thực thi cùng nhau bằng cách sử dụng API thao tác ghi hàng loạt

Hoạt động ghi số lượng lớn được đặt hàng

Các hoạt động ghi hàng loạt đã đặt hàng được thực hiện theo đợt và gửi đến máy chủ theo thứ tự được cung cấp để thực hiện nối tiếp. Giá trị trả về là một ví dụ mô tả loại và số lượng hoạt động được thực hiện

>>> from pprint import pprint
>>> from pymongo import InsertOne, DeleteMany, ReplaceOne, UpdateOne
>>> result = db.test.bulk_write([
..     DeleteMany({}),  # Remove all documents from the previous example.
..     InsertOne({'_id': 1}),
..     InsertOne({'_id': 2}),
..     InsertOne({'_id': 3}),
..     UpdateOne({'_id': 1}, {'$set': {'foo': 'bar'}}),
..     UpdateOne({'_id': 4}, {'$inc': {'j': 1}}, upsert=True),
..     ReplaceOne({'j': 1}, {'j': 2})])
>>> pprint(result.bulk_api_result)
{'nInserted': 3,
 'nMatched': 2,
 'nModified': 2,
 'nRemoved': 10000,
 'nUpserted': 1,
 'upserted': [{'_id': 4, 'index': 5}],
 'writeConcernErrors': [],
 'writeErrors': []}

Lỗi ghi đầu tiên xảy ra (e. g. lỗi khóa trùng lặp) hủy bỏ các hoạt động còn lại và PyMongo tăng. Thuộc tính ________ 4 của trường hợp ngoại lệ cung cấp kết quả thực thi cho đến khi xảy ra lỗi và thông tin chi tiết về lỗi - bao gồm cả thao tác gây ra lỗi

>>> from pymongo import InsertOne, DeleteOne, ReplaceOne
>>> from pymongo.errors import BulkWriteError
>>> requests = [
..     ReplaceOne({'j': 2}, {'i': 5}),
..     InsertOne({'_id': 4}),  # Violates the unique key constraint on _id.
..     DeleteOne({'i': 5})]
>>> try:
..     db.test.bulk_write(requests)
.. except BulkWriteError as bwe:
..     pprint(bwe.details)
...
{'nInserted': 0,
 'nMatched': 1,
 'nModified': 1,
 'nRemoved': 0,
 'nUpserted': 0,
 'upserted': [],
 'writeConcernErrors': [],
 'writeErrors': [{'code': 11000,
                  'errmsg': '...E11000...duplicate key error...',
                  'index': 1,...
                  'op': {'_id': 4}}]}

Thao tác ghi hàng loạt không theo thứ tự

Các hoạt động ghi hàng loạt không theo thứ tự được thực hiện theo đợt và gửi đến máy chủ theo thứ tự tùy ý nơi chúng có thể được thực thi song song. Bất kỳ lỗi nào xảy ra đều được báo cáo sau khi thực hiện tất cả các thao tác

Trong ví dụ tiếp theo, thao tác thứ nhất và thứ ba không thành công do ràng buộc duy nhất trên _id. Vì chúng tôi đang thực hiện không theo thứ tự nên hoạt động thứ hai và thứ tư thành công

>>> requests = [
..     InsertOne({'_id': 1}),
..     DeleteOne({'_id': 2}),
..     InsertOne({'_id': 3}),
..     ReplaceOne({'_id': 4}, {'i': 1})]
>>> try:
..     db.test.bulk_write(requests, ordered=False)
.. except BulkWriteError as bwe:
..     pprint(bwe.details)
...
{'nInserted': 0,
 'nMatched': 1,
 'nModified': 1,
 'nRemoved': 1,
 'nUpserted': 0,
 'upserted': [],
 'writeConcernErrors': [],
 'writeErrors': [{'code': 11000,
                  'errmsg': '...E11000...duplicate key error...',
                  'index': 0,...
                  'op': {'_id': 1}},
                 {'code': 11000,
                  'errmsg': '...',
                  'index': 2,...
                  'op': {'_id': 3}}]}

Viết mối quan tâm

Các hoạt động hàng loạt được thực thi với bộ sưu tập mà chúng được thực thi đối với. Viết lỗi quan tâm (e. g. wtimeout) sẽ được báo cáo sau khi tất cả các hoạt động được thực hiện, bất kể thứ tự thực hiện

Làm cách nào để cập nhật hàng loạt trong MongoDB?

Chúng ta có thể sử dụng phương thức initializeOrderedBulkOp() hoặc initializeUnorderedBulkOp() để thực hiện các thao tác hàng loạt trong MongoDB . Chúng tôi cần sử dụng số lượng lớn. exec() để chạy tất cả các hoạt động được xây dựng bởi các phương thức hàng loạt. Từ phiên bản MongoDB, 4. 2 phương pháp cập nhật hàng loạt sẽ chấp nhận tập hợp đường ống.

Làm cách nào để tải dữ liệu hàng loạt trong MongoDB?

Trong MongoDB, Hàng loạt. phương thức insert() được sử dụng để thực hiện thao tác chèn hàng loạt. Hay nói cách khác, hàng loạt. phương thức insert() được sử dụng để chèn nhiều tài liệu trong một lần.

Làm cách nào để sử dụng ghi hàng loạt trong MongoDB?

Một mảng các thao tác ghi bulkWrite(). Hoạt động hợp lệ là. chènMột. cập nhậtMột. .
Một giá trị logic được thừa nhận là đúng nếu thao tác chạy với mối quan tâm ghi hoặc sai nếu mối quan tâm ghi bị vô hiệu hóa
Số đếm cho mỗi thao tác ghi
Một mảng chứa một _id cho mỗi tài liệu được chèn hoặc nâng cấp thành công

Thao tác hàng loạt trong MongoDB là gì?

Bulk() Trình tạo thao tác hàng loạt được sử dụng để xây dựng danh sách các thao tác ghi để thực hiện hàng loạt cho một bộ sưu tập duy nhất . Để khởi tạo trình tạo, hãy sử dụng lệnh db. thu thập. khởi tạoOrderedBulkOp() hoặc db.