Trong MongoDB, db.collection.bulkWrite()
phương thức thực hiện nhiều thao tác ghi với các điều khiển cho thứ tự thực hiện.
Các hoạt động ghi hàng loạt ảnh hưởng đến một tập hợp duy nhất. Bộ sưu tập collection
một phần là tên của tập hợp để thực hiện các thao tác với nó.
Thao tác viết hàng loạt
db.collection.bulkWrite()
phương thức có thể được sử dụng để thực hiện các hoạt động ghi sau:
-
insertOne
-
updateOne
-
updateMany
-
replaceOne
-
deleteOne
-
deleteMany
Bất kỳ phương thức nào trong số này đều có thể được đưa vào lệnh gọi tới db.collection.bulkWrite()
và bạn có thể bao gồm các phương thức khác nhau trong cùng một lệnh gọi.
Ví dụ
Đây là một ví dụ về việc sử dụng db.collection.bulkWrite()
để thực hiện thao tác ghi hàng loạt đối với tập hợp có tên là pets
:
Giả sử chúng ta chèn các tài liệu sau vào một bộ sưu tập có tên là pets
:
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog", weight: 20 },
{ _id: 2, name: "Bark", type: "Dog", weight: 10 },
{ _id: 3, name: "Meow", type: "Cat" },
{ _id: 4, name: "Scratch", type: "Cat" },
{ _id: 5, name: "Bruce", type: "Bat" }
])
Bây giờ chúng ta có thể sử dụng db.collection.bulkWrite()
để thực hiện thao tác ghi hàng loạt đối với tập hợp đó.
Ví dụ:
db.pets.bulkWrite([
{ insertOne: { "document": { "_id": 6, "name": "Bubbles", "type": "Fish" }}},
{ updateOne : {
"filter" : { "_id" : 2 },
"update" : { $set : { "weight" : 15 } }
} },
{ deleteOne : { "filter" : { "_id" : 5 } } },
{ replaceOne : {
"filter" : { "_id" : 4 },
"replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 }
} }
])
Kết quả:
{ "acknowledged" : true, "deletedCount" : 1, "insertedCount" : 1, "matchedCount" : 2, "upsertedCount" : 0, "insertedIds" : { "0" : 6 }, "upsertedIds" : { } }
Trong trường hợp này, chúng tôi đã chèn một tài liệu, cập nhật tài liệu khác, xóa tài liệu khác và thay thế tài liệu khác.
db.collection.bulkWrite()
phương thức trả về như sau:
- Một boolean
acknowledged
dưới dạngtrue
nếu hoạt động chạy với mối quan tâm về ghi hoặcfalse
nếu mối quan tâm viết đã bị vô hiệu hóa. - Số lượng cho mỗi thao tác ghi.
- Một mảng chứa
_id
cho mỗi tài liệu được chèn hoặc nâng cấp thành công.
Xem kết quả
Bây giờ chúng ta hãy xem lại các tài liệu trong bộ sưu tập.
db.pets.find()
Kết quả:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 15 } { "_id" : 3, "name" : "Meow", "type" : "Cat" } { "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 } { "_id" : 6, "name" : "Bubbles", "type" : "Fish" }
Chúng tôi có thể thấy rằng tất cả các thay đổi đã được thực hiện như đã chỉ định.
ordered
Tham số
Các hoạt động ghi hàng loạt có thể có thứ tự hoặc không có thứ tự. Theo mặc định, chúng được đặt hàng.
Bạn có thể chỉ định thứ tự bằng cách sử dụng tham số boolean có thứ tự. Cung cấp giá trị true
đặt nó thành một danh sách các thao tác có thứ tự, đặt nó thành false
làm cho nó trở thành một danh sách các hoạt động không có thứ tự.
Với một danh sách các hoạt động có thứ tự, MongoDB thực hiện các hoạt động theo thứ tự. Nếu lỗi xảy ra trong quá trình xử lý một trong các hoạt động ghi, MongoDB sẽ trả về mà không xử lý bất kỳ hoạt động ghi nào còn lại trong danh sách.
Với danh sách các hoạt động không có thứ tự, MongoDB có thể thực hiện các hoạt động song song (mặc dù điều này không được đảm bảo). Nếu lỗi xảy ra trong quá trình xử lý một trong các hoạt động ghi, MongoDB sẽ tiếp tục xử lý các hoạt động ghi còn lại trong danh sách.
Thông tin thêm
db.collection.bulkWrite()
phương thức cũng chấp nhận một writeConcern
đối số, mô tả mức xác nhận được yêu cầu từ MongoDB cho các hoạt động ghi.
Xem tài liệu MongoDB cho db.collection.bulkWrite()
để biết thêm thông tin.