ใช้ bulkWrite() เพื่อดำเนินการเขียนหลายแบบ (insert, update, delete) พร้อมกันในครั้งเดียว รองรับ Upsert แบบมีเงื่อนไข
ตัวอย่างข้อมูลทดสอบ
> db.demo428.insertOne({ "Name": "Chris", "Age": 21 });
{ "acknowledged": true, "insertedId": ObjectId("5e75f428bbc41e36cc3cae83") }
> db.demo428.insertOne({ "Name": "Chris", "Age": 23 });
{ "acknowledged": true, "insertedId": ObjectId("5e75f429bbc41e36cc3cae84") }
> db.demo428.insertOne({ "Name": "David", "Age": 22 });
{ "acknowledged": true, "insertedId": ObjectId("5e75f42abbc41e36cc3cae85") }
> db.demo428.insertOne({ "Name": "David", "Age": 21 });
{ "acknowledged": true, "insertedId": ObjectId("5e75f42abbc41e36cc3cae86") }
แสดงข้อมูลก่อน
> db.demo428.find();
ผลลัพธ์
{
"_id": ObjectId("5e75f428bbc41e36cc3cae83"), "Name": "Chris", "Age": 21
}
{
"_id": ObjectId("5e75f429bbc41e36cc3cae84"), "Name": "Chris", "Age": 23
}
{
"_id": ObjectId("5e75f42abbc41e36cc3cae85"), "Name": "David", "Age": 22
}
{
"_id": ObjectId("5e75f42abbc41e36cc3cae86"), "Name": "David", "Age": 21
}
bulkWrite: อัปเดต David อายุ 22 + เพิ่ม Carol ใหม่ (ordered: false = รันแบบขนาน)
> db.demo428.bulkWrite([
{
"updateOne": {
"filter": { "Name": "David", "Age": 22 },
"update": { "$set": { "Info": { "Name": "John" } } }
}
},
{
"insertOne": {
"document": { "Name": "Carol", "Age": 22, "Info": { "Name": "John" } }
}
}
], { "ordered": false });
{ "acknowledged": true, "deletedCount": 0, "insertedCount": 1, "matchedCount": 1, "upsertedCount": 0, "insertedIds": { "1": ObjectId("5e75f448bbc41e36cc3cae87") }, "upsertedIds": {} }
ตรวจสอบหลัง bulkWrite
> db.demo428.find();
ผลลัพธ์ (David อายุ 22 มี Info เพิ่ม + Carol ใหม่ถูกเพิ่ม)
{
"_id": ObjectId("5e75f428bbc41e36cc3cae83"), "Name": "Chris", "Age": 21
}
{
"_id": ObjectId("5e75f429bbc41e36cc3cae84"), "Name": "Chris", "Age": 23
}
{
"_id": ObjectId("5e75f42abbc41e36cc3cae85"), "Name": "David", "Age": 22, "Info": { "Name": "John" }
}
{
"_id": ObjectId("5e75f42abbc41e36cc3cae86"), "Name": "David", "Age": 21
}
{
"_id": ObjectId("5e75f448bbc41e36cc3cae87"), "Name": "Carol", "Age": 22, "Info": { "Name": "John" }
}
ประโยชน์ของ bulkWrite:
- ลดการเดินทางระหว่าง Client-Server (Network Round-trips)
ordered: falseรันแบบขนาน เร็วกว่า- รองรับ
upsert: trueใน updateOne/updateMany - คืนสรุปผลลัพธ์ครบถ้วน (insertedCount, matchedCount, modifiedCount, upsertedCount)