Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

Conditional Upsert หลายรายการใน MongoDB ด้วย bulkWrite()

ใช้ 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)