আগের lesson-এর insert, update, আর delete operation একটা সময়ে একটা চলে — হাতেগোনা কয়েকটা document-এর জন্য ঠিক আছে, কিন্তু শত বা হাজার বদলাতে হলে একটা আসল খরচ। bulkWrite() database-এ একটা একক request-এ অনেক operation batch করে।
db.products.bulkWrite([
{ insertOne: { document: { name: 'Widget', price: 9.99 } } },
{ updateOne: {
filter: { name: 'Gadget' },
update: { $set: { price: 14.99 } }
} },
{ deleteOne: { filter: { name: 'Discontinued Item' } } },
])| Operation | যেমন |
|---|---|
| insertOne | db.collection.insertOne() |
| updateOne / updateMany | db.collection.updateOne() / updateMany() |
| replaceOne | db.collection.replaceOne() |
| deleteOne / deleteMany | db.collection.deleteOne() / deleteMany() |
প্রতিটা আলাদা insertOne()/updateOne() call database server-এ নিজের একটা round trip। bulkWrite() প্রতিটা operation একসাথে পাঠায়, একটা বড় batch-এর জন্য network overhead নাটকীয়ভাবে কমায়।
// Default: ordered — প্রথম failure-এ থামে, এর পরের operation চলে না
db.products.bulkWrite([ /* ... */ ])
// Unordered — একটা operation fail করলেও চলতে থাকে, দ্রুত চলে
// (array-র ক্রমে চলার গ্যারান্টি নেই) কারণ এরা একে অপরের উপর নির্ভর করে না
db.products.bulkWrite([ /* ... */ ], { ordered: false })const result = db.products.bulkWrite([ /* ... */ ])
print(result.insertedCount)
print(result.modifiedCount)
print(result.deletedCount)ক্লাসিক bulkWrite use case
একটা common আসল ব্যবহার: হাজার হাজার record-এর একটা CSV বা JSON file import করা — file পড়ুন, insertOne operation-এর একটা bulkWrite() array বানান, আর হাজার হাজার আলাদা insert-এর বদলে একটা একক batch হিসেবে পাঠান।