MongoDB อัปเดต () เอกสารพร้อมตัวอย่าง

\

⚡ สรุปอย่างชาญฉลาด

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

  • ✏️ เมธอด update(): คำสั่ง update() จะเปลี่ยนค่าในฟิลด์ของเอกสารที่ตรงกับเงื่อนไขที่กำหนด
  • 🎯 เงื่อนไขการแข่งขัน: อาร์กิวเมนต์แรกใช้เลือกเอกสารที่จะอัปเดต เช่น {Employeeid:1}
  • 🔧 ชุด $ Operaทอร์: ตัวดำเนินการ `$set` กำหนดค่าใหม่ให้กับฟิลด์โดยไม่ต้องแทนที่เอกสารทั้งหมด
  • 📚 อัปเดตหลายรายการ: ตัวเลือก multi หรือ updateMany() จะแก้ไขเอกสารทุกฉบับที่ตรงกับเงื่อนไข แทนที่จะแก้ไขเพียงเอกสารเดียว
  • อัปเดต: ตัวเลือก upsert จะแทรกเอกสารใหม่เมื่อไม่มีเอกสารใดที่ตรงกับเงื่อนไขที่มีอยู่
  • 🔄 วิธีการสมัยใหม่: updateOne(), updateMany() และ replaceOne() คือฟังก์ชันที่ใช้ทดแทน update() ที่เลิกใช้งานแล้วในปัจจุบัน

MongoDB อัปเดต () เอกสาร

การอัปเดตเอกสารพื้นฐาน

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()

คำถามที่พบบ่อย

หากไม่มีตัวดำเนินการอัปเดต เช่น $set MongoDB แทนที่เอกสารที่ตรงกันทั้งหมดด้วยวัตถุที่คุณระบุ โดยลบฟิลด์ใดๆ ที่ไม่เกี่ยวข้องออกไป ควรใช้คำสั่ง `$set` เพื่อแก้ไขฟิลด์เฉพาะเจาะจงเสมอ (kee)ping ส่วนที่เหลือยังคงสภาพสมบูรณ์

ใช่แล้ว หากฟิลด์ที่ระบุใน $set หายไปจากเอกสารที่ตรงกัน MongoDB เพิ่มค่าที่กำหนดเข้าไป ทำให้ $set มีประโยชน์ทั้งในการอัปเดตฟิลด์ที่มีอยู่และเพิ่มฟิลด์ใหม่

ใช้ findOneAndUpdate() โดยตั้งค่าตัวเลือก returnDocument เป็น 'after' วิธีนี้จะทำการเปลี่ยนแปลงและส่งคืนเอกสารที่แก้ไขแล้วในขั้นตอนเดียว ซึ่งมีประโยชน์เมื่อคุณต้องการค่าใหม่ทันที

AI สามารถแปลงคำขอธรรมดาให้เป็นคำสั่งอัปเดตหรืออัปเดตหลายครั้งได้ โดยใช้เงื่อนไขและตัวดำเนินการที่ถูกต้อง เช่น $set หรือ $inc และอธิบายแต่ละส่วนเพื่อให้ผู้เริ่มต้นหลีกเลี่ยงข้อผิดพลาดได้

ใช่แล้ว AI สามารถแจ้งเตือนเมื่อการอัปเดตครั้งใดครั้งหนึ่งขาดพารามิเตอร์ $set และจะแทนที่เอกสารทั้งหมด แจ้งเตือนเมื่อตัวกรองตรงกับทุกอย่าง และแนะนำให้ทดสอบกับสำเนาdก่อนที่จะใช้งานจริง

สรุปโพสต์นี้ด้วย: