MongoDB อัปเดต () เอกสารพร้อมตัวอย่าง
\
⚡ สรุปอย่างชาญฉลาด
MongoDB เมธอด Update() จะแก้ไขระเบียนที่มีอยู่แล้วในคอลเลกชัน เมธอด update() รับเงื่อนไขเพื่อเลือกเอกสารและตัวแก้ไข เช่น $set เพื่อเปลี่ยนค่าฟิลด์ และตัวเลือก multi จะอัปเดตเอกสารที่ตรงกันหลายรายการพร้อมกัน

การอัปเดตเอกสารพื้นฐาน
MongoDB จัดเตรียมคำสั่ง update() เพื่ออัพเดตเอกสารของคอลเลกชัน หากต้องการอัปเดตเฉพาะเอกสารที่คุณต้องการอัปเดต คุณสามารถเพิ่มเกณฑ์ในคำสั่งอัปเดตเพื่อให้อัปเดตเฉพาะเอกสารที่เลือกเท่านั้น
พารามิเตอร์พื้นฐานในคำสั่งคือเงื่อนไขที่ต้องอัปเดตเอกสาร และเงื่อนไขถัดไปคือการแก้ไขที่จำเป็นต้องดำเนินการ
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีดำเนินการนี้
ขั้นตอน 1) ออกคำสั่งอัพเดต
ขั้นตอน 2) เลือกเงื่อนไขที่คุณต้องการใช้เพื่อตัดสินใจว่าจะต้องอัปเดตเอกสารใด ในตัวอย่างของเรา เราต้องการอัปเดตเอกสารซึ่งมีรหัสพนักงาน 22
ขั้นตอน 3) ใช้คำสั่ง set เพื่อแก้ไขชื่อฟิลด์
ขั้นตอน 4) เลือกชื่อฟิลด์ที่คุณต้องการแก้ไขและป้อนค่าใหม่ตามลำดับ
db.Employee.update( {"Employeeid" : 1}, {$set: { "EmployeeName" : "NewMartin"}});
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้
Output:
ผลลัพธ์แสดงให้เห็นอย่างชัดเจนว่ามีหนึ่งระเบียนที่ตรงกับเงื่อนไข ดังนั้นค่าฟิลด์ที่เกี่ยวข้องจึงได้รับการแก้ไข
MongoDB บันทึก Operaโปร
ตัวดำเนินการ `$set` เป็นวิธีที่ใช้กันบ่อยที่สุดในการเปลี่ยนแปลงค่าในฟิลด์ แต่... MongoDB มีตัวดำเนินการอัปเดตหลายตัวสำหรับความต้องการที่แตกต่างกัน คุณวางตัวดำเนินการเหล่านี้ไว้ในอาร์กิวเมนต์ที่สองของ update() เคียงข้างหรือแทนที่ $set:
- $ชุด: กำหนดค่าให้กับฟิลด์ โดยจะสร้างฟิลด์ขึ้นมาหากยังไม่มีอยู่
- $ไม่ได้ตั้งค่า: ลบฟิลด์ออกจากเอกสารโดยสมบูรณ์
- $รวม: เพิ่มหรือลดค่าตัวเลขในช่องข้อมูลตามจำนวนที่กำหนด
- $mul: คูณค่าของฟิลด์ตัวเลข
- $เปลี่ยนชื่อ: เปลี่ยนชื่อฟิลด์เป็นชื่อใหม่
- $ผลักดัน: เพิ่มค่าลงในฟิลด์อาร์เรย์
- $ดึง: ลบค่าที่ตรงกันออกจากฟิลด์อาร์เรย์
ตัวดำเนินการแต่ละตัวจะกำหนดเป้าหมายเฉพาะฟิลด์ที่คุณระบุเท่านั้น โดยปล่อยให้ส่วนที่เหลือของเอกสารไม่เปลี่ยนแปลง คุณสามารถรวมตัวดำเนินการหลายตัวเข้าด้วยกันในการเรียกใช้ update() ครั้งเดียวเพื่อแก้ไขหลายฟิลด์พร้อมกัน ซึ่งจะทำให้การอัปเดตมีความแม่นยำและหลีกเลี่ยงการเขียนทับข้อมูลที่คุณต้องการเก็บไว้
การอัปเดตหลายค่า
เพื่อให้แน่ใจว่าเอกสารหลายรายการ/จำนวนมากได้รับการอัปเดตพร้อมกันใน MongoDB คุณจำเป็นต้องใช้ตัวเลือกหลายรายการ เพราะหากไม่เช่นนั้น ตามค่าเริ่มต้น จะมีการแก้ไขเอกสารครั้งละหนึ่งฉบับเท่านั้น
ตัวอย่างต่อไปนี้จะแสดงวิธีการอัปเดตเอกสารจำนวนมาก
ในตัวอย่างนี้ ก่อนอื่นเราจะค้นหาเอกสารที่มีรหัสพนักงานเป็น "1" และเปลี่ยนชื่อพนักงานจาก "Martin" เป็น "NewMartin"
ขั้นตอน 1) ออกคำสั่งอัพเดต
ขั้นตอน 2) เลือกเงื่อนไขที่คุณต้องการใช้เพื่อตัดสินใจว่าจะต้องอัปเดตเอกสารใด ในตัวอย่างของเรา เราต้องการให้เอกสารที่มีรหัสพนักงานเป็น “1” ได้รับการอัปเดต
ขั้นตอน 3) เลือกชื่อฟิลด์ที่คุณต้องการแก้ไขและป้อนค่าใหม่ตามนั้น
db.Employee.update ( { Employeeid : 1 }, { $set : { "EmployeeName" : "NewMartin", "Employeeid" : 22 } } )
หากดำเนินการคำสั่งสำเร็จและหากคุณเรียกใช้ "หา" คำสั่งค้นหาเอกสารที่มีรหัสพนักงานเป็น 22 จะแสดงผลลัพธ์ดังนี้
Output:
ผลลัพธ์แสดงให้เห็นอย่างชัดเจนว่ามีหนึ่งระเบียนที่ตรงกับเงื่อนไข ดังนั้นค่าฟิลด์ที่เกี่ยวข้องจึงได้รับการแก้ไข
วิธีการอัปเดตหรือแทรกเอกสารใน MongoDB
การอัปเดตแบบ Upsert คือการรวมกันระหว่างการอัปเดตและการแทรก เมื่อคุณเปิดใช้งานฟังก์ชันนี้ MongoDB อัปเดตเอกสารที่ตรงกับเงื่อนไข หรือแทรกเอกสารใหม่หากไม่พบเอกสารที่ตรงกัน วิธีนี้มีประโยชน์เมื่อคุณไม่แน่ใจว่ามีระเบียนนั้นอยู่แล้วหรือไม่
ในการดำเนินการ upsert ให้เพิ่มตัวเลือก upsert ที่ตั้งค่าเป็น true เป็นอาร์กิวเมนต์ที่สามของ update():
db.Employee.update( {Employeeid: 5}, {$set: {EmployeeName: "Sofia"}}, {upsert: true} )
นี่คือสิ่งที่เกิดขึ้น:
- หากมีเอกสารที่มีรหัสพนักงาน 5 อยู่แล้ว MongoDB อัปเดตฟิลด์ EmployeeName ของระบบ
- หากไม่มีเอกสารดังกล่าวอยู่ MongoDB แทรกเอกสารใหม่ที่มีรหัสพนักงาน 5 และชื่อพนักงาน “Sofiก".
คำสั่ง Upsert มีประโยชน์สำหรับตัวนับ การตั้งค่า และเวิร์กโฟลว์ใดๆ ที่คุณต้องการสร้างเรคอร์ดเมื่อใช้งานครั้งแรกและอัปเดตในภายหลัง ในระบบสมัยใหม่ MongoDBพฤติกรรมเดียวกันนี้สามารถใช้งานได้ผ่าน updateOne() และ updateMany() โดยการส่งค่า {upsert: true} ในตัวเลือก โปรดระมัดระวังเงื่อนไข เนื่องจากตัวกรองแบบกว้างๆ ที่ใช้ร่วมกับ upsert อาจสร้างเอกสารที่ไม่คาดคิดได้
updateOne() เทียบกับ updateMany() เทียบกับ replaceOne()
เมธอด update() เป็นคำสั่งเก่าแล้ว (Modern) MongoDB ผู้ขับขี่ได้แบ่งพฤติกรรมดังกล่าวออกเป็นสามวิธีที่ชัดเจนยิ่งขึ้น ตารางด้านล่างนี้เปรียบเทียบวิธีการเหล่านั้น:
| วิธี | สิ่งที่มันไม่ | เอกสารที่ได้รับผลกระทบ |
|---|---|---|
| อัพเดตหนึ่ง() | ใช้ตัวดำเนินการอัปเดตกับเอกสารแรกที่ตรงกัน | หนึ่ง |
| อัพเดตหลาย() | ใช้ตัวดำเนินการอัปเดตกับเอกสารที่ตรงกันทุกฉบับ | หลาย |
| แทนที่หนึ่ง() | แทนที่เอกสารฉบับแรกที่ตรงกันทั้งหมดด้วยเอกสารใหม่ | หนึ่ง |
ใช้ updateOne() สำหรับการเปลี่ยนแปลงเป้าหมายเดียว, updateMany() แทนตัวเลือก multi แบบเก่า และ replaceOne() เมื่อต้องการเปลี่ยนเอกสารทั้งหมดแทนที่จะแก้ไขเฉพาะฟิลด์ วิธีการเหล่านี้จะส่งคืนผลลัพธ์ที่ชัดเจนซึ่งแสดงจำนวนเอกสารที่ตรงกันและจำนวนเอกสารที่ถูกแก้ไข ทำให้ปลอดภัยและแก้ไขข้อผิดพลาดได้ง่ายกว่า update()


