MongoDB อาร์เรย์ของวัตถุโดยใช้ insert() พร้อมตัวอย่าง

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

MongoDB การใช้ Array of Objects ร่วมกับ insert() แสดงวิธีการเพิ่มเอกสารหลายรายการลงในคอลเลกชันในการดำเนินการเดียว โดยจะจัดเก็บอาร์เรย์ของข้อมูลพนักงาน ฝังอาร์เรย์ไว้ในเอกสาร และแสดงผลลัพธ์อย่างเรียบร้อยโดยใช้ฟังก์ชัน print ของ JSON

  • 📥 เอกสารแทรกจำนวนมาก: เมธอด insert() จะเพิ่มอาร์เรย์ของเอกสารลงในคอลเลกชันในขั้นตอนเดียวอย่างมีประสิทธิภาพ
  • 🧾 แบบจำลองเอกสาร: เอกสารแต่ละฉบับประกอบด้วยคู่ของฟิลด์และค่า และ MongoDB เพิ่ม _id ที่ไม่ซ้ำกันโดยอัตโนมัติ
  • 🗂️ อาร์เรย์ฝังตัว: อาร์เรย์สามารถอยู่ในรูปแบบของฟิลด์ภายในเอกสารได้เช่นกันping ค่าที่เกี่ยวข้องกัน
  • 🔁 วิธีการสมัยใหม่: เมธอด insertOne() และ insertMany() เป็นเมธอดใหม่ที่ชัดเจนกว่าและใช้งานได้ง่ายกว่าเมธอด insert() เดิม
  • 🖨️ Readable Output: คำสั่ง forEach(printjson) จะพิมพ์เอกสารทุกฉบับในรูปแบบ JSON ที่สะอาดตาและอ่านง่าย

เมธอด insert() คืออะไรใน MongoDB?

เมธอด insert() ใน MongoDB ฟังก์ชันนี้ใช้สำหรับเพิ่มเอกสารหนึ่งรายการหรือมากกว่านั้นลงในคอลเลกชัน เอกสารคือชุดของคู่ฟิลด์และค่าที่จัดเก็บในรูปแบบ BSON ซึ่งเป็นรูปแบบไบนารีของ JSON เมื่อคุณส่งเอกสารเพียงรายการเดียว ฟังก์ชัน insert() จะจัดเก็บเรคอร์ดนั้นเพียงรายการเดียว แต่เมื่อคุณส่งอาร์เรย์ของเอกสาร ฟังก์ชันจะจัดเก็บเอกสารทั้งหมดในการดำเนินการครั้งเดียว ซึ่งเร็วกว่าการแทรกทีละรายการ

เมธอดนี้จะทำงานกับคอลเลกชันที่ระบุโดยใช้รูปแบบ db.collection.insert() หากคอลเลกชันเป้าหมายยังไม่มีอยู่ MongoDB ระบบจะสร้างฟิลด์ _id โดยอัตโนมัติระหว่างการแทรกข้อมูลครั้งแรก นอกจากนี้ เอกสารแต่ละฉบับจะได้รับฟิลด์ _id ที่ไม่ซ้ำกัน หากคุณไม่ได้ระบุไว้ เพื่อให้สามารถระบุระเบียนแต่ละรายการได้ในภายหลัง

แม้ว่าฟังก์ชัน insert() ยังคงใช้งานได้ แต่รุ่นใหม่กว่า MongoDB เวอร์ชันต่างๆ มีเมธอด insertOne() และ insertMany() ให้เลือกใช้เพื่อความชัดเจนยิ่งขึ้น ตัวอย่างด้านล่างใช้เมธอด insert() เพื่อเพิ่มอาร์เรย์ของเอกสารพนักงาน แล้วแสดงผลลัพธ์ในรูปแบบ JSON ที่อ่านง่าย

การเพิ่มอาร์เรย์ของเอกสาร

คำสั่ง "insert" ยังสามารถใช้เพื่อแทรกเอกสารหลายฉบับลงในคอลเลกชันพร้อมกันได้ ตัวอย่างโค้ดด้านล่างสามารถใช้เพื่อแทรกเอกสารหลายรายการในแต่ละครั้ง

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการดำเนินการนี้

ขั้นตอน 1) สร้าง Javaต้นฉบับ ตัวแปรที่เรียกว่า myEmployee เพื่อเก็บอาร์เรย์ของเอกสาร

ขั้นตอน 2) เพิ่มเอกสารที่จำเป็นด้วยชื่อฟิลด์และค่าให้กับตัวแปร

ขั้นตอน 3) ใช้คำสั่ง insert เพื่อแทรกอาร์เรย์ของเอกสารลงในคอลเลกชัน

var myEmployee=
	[
		{
			"Employeeid" : 1,
			"EmployeeName" : "Smith"
		},
		{
			"Employeeid"   : 2,
			"EmployeeName" : "Mohan"
		},
		{
			"Employeeid"   : 3,
			"EmployeeName" : "Joe"
		},
	];

	db.Employee.insert(myEmployee);

หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้

MongoDB อาร์เรย์ของวัตถุโดยใช้การแทรก ()

ผลลัพธ์แสดงว่ามีการเพิ่มเอกสารทั้ง 3 รายการลงในคอลเลกชัน

วิธีการแทรกอาร์เรย์ลงในเอกสาร

นอกจากการแทรกเอกสารแยกต่างหากหลายฉบับแล้ว MongoDB ช่วยให้คุณจัดเก็บอาร์เรย์เป็นฟิลด์ภายในเอกสารเดียว ซึ่งมีประโยชน์เมื่อระเบียนหนึ่งๆ มีค่าหลายค่า เช่น พนักงานที่มีทักษะหลายอย่าง หรือนักเรียนที่ลงทะเบียนเรียนหลายหลักสูตร เนื่องจาก MongoDB ใช้โมเดลเอกสารที่ยืดหยุ่น โดยอาร์เรย์จะอยู่ภายในอ็อบเจ็กต์โดยตรง แทนที่จะอยู่ในตารางแยกต่างหาก ซึ่งจะช่วยจัดเก็บข้อมูลที่เกี่ยวข้องไว้ด้วยกัน

ตัวอย่างต่อไปนี้จะแทรกเอกสารพนักงานหนึ่งรายซึ่งมีฟิลด์แบบอาร์เรย์ชื่อ "ทักษะ":

db.Employee.insert(
   {
      "Employeeid" : 4,
      "EmployeeName" : "Alan",
      "Skills" : [ "MongoDB", "Node.js", "Express" ]
   }
);

ส่วนต่างๆ ของเอกสารนี้มีการทำงานดังต่อไปนี้:

  • พนักงาน และ ชื่อพนักงาน เป็นคู่ฟิลด์และค่าทั่วไป
  • ทักษะ เป็นฟิลด์อาร์เรย์ที่เก็บค่าสตริงสามค่าไว้ภายในวงเล็บเหลี่ยม
  • เอกสารทั้งหมด รวมทั้งอาร์เรย์ที่ฝังอยู่ จะถูกจัดเก็บในการดำเนินการแทรกเพียงครั้งเดียว

หลังจากเพิ่มเรคอร์ดแล้ว คุณสามารถตรวจสอบอาร์เรย์ที่ฝังอยู่ได้โดยใช้คำสั่งค้นหาที่แสดงผลลัพธ์ในรูปแบบ JSON:

db.Employee.find( { "Employeeid" : 4 } ).forEach(printjson)

ผลลัพธ์แสดงให้เห็นอาร์เรย์ทักษะที่ซ้อนอยู่ภายในเอกสารพนักงาน Laterคุณสามารถเพิ่มค่าใหม่ลงในอาร์เรย์โดยใช้ตัวดำเนินการ $push หรืออ่านองค์ประกอบเดียวโดยใช้ตำแหน่งดัชนี การจัดเก็บค่าที่เชื่อมโยงกันในลักษณะนี้ทำให้แต่ละเอกสารมีความสมบูรณ์ในตัวเอง ลดความจำเป็นในการเชื่อมต่อระหว่างคอลเลกชัน และทำให้ข้อมูลอ่านและบำรุงรักษาได้ง่ายขึ้น

insert() เทียบกับ insertOne() เทียบกับ insertMany()

MongoDB มีวิธีการเพิ่มข้อมูลที่เกี่ยวข้องกันสามวิธี ตารางด้านล่างเปรียบเทียบวิธีการเหล่านั้นเพื่อให้คุณสามารถเลือกวิธีที่เหมาะสมได้:

วิธี จุดมุ่งหมาย ตัวอย่าง
แทรก() วิธีการเดิมที่ใช้เพิ่มเอกสารทีละฉบับหรือเป็นอาร์เรย์ของเอกสาร วิธีนี้ยังคงใช้งานได้ แต่ถูกยกเลิกการใช้งานในไดรเวอร์เวอร์ชันใหม่กว่า db.Employee.insert(myEmployee)
แทรกหนึ่ง() เพิ่มเอกสารเพียงหนึ่งรายการและส่งคืน _id ที่เพิ่มเข้าไป เหมาะสำหรับระเบียนเดียว db.Employee.insertOne({ … })
insertMany() เพิ่มอาร์เรย์ของเอกสารในการเรียกครั้งเดียวและส่งคืน _id ที่แทรกทั้งหมด เหมาะสำหรับการแทรกข้อมูลจำนวนมาก db.Employee.insertMany([ { … }, { … } ])

สำหรับโปรเจกต์ใหม่ ให้ใช้ insertOne() และ insertMany() เพราะให้ความหมายที่ชัดเจนกว่าและรายงานข้อผิดพลาดได้ดีกว่า เมธอด insert() ยังคงมีให้ใช้งานอยู่ส่วนใหญ่เพื่อความเข้ากันได้กับบทเรียนและสคริปต์เก่าๆ

การพิมพ์ในรูปแบบ JSON

JSON เป็นรูปแบบที่เรียกว่า Javaสัญกรณ์วัตถุสคริปต์และเป็นเพียงวิธีการจัดเก็บข้อมูลในลักษณะที่เป็นระเบียบและอ่านง่าย ในตัวอย่างเพิ่มเติม เราจะใช้ฟังก์ชันการพิมพ์ JSON เพื่อดูผลลัพธ์ในรูปแบบที่ดีกว่า

มาดูตัวอย่างการพิมพ์ในรูปแบบ JSON กัน

db.Employee.find().forEach(printjson)

Code คำอธิบาย:

  1. การเปลี่ยนแปลงแรกคือการเพิ่มฟังก์ชัน forEach() เข้าไปในฟังก์ชัน find() ซึ่งจะทำให้แน่ใจว่าได้วนไปตรวจสอบเอกสารแต่ละฉบับในคอลเลกชันอย่างชัดเจน ด้วยวิธีนี้ คุณจะมีควบคุมการทำงานกับเอกสารแต่ละฉบับในคอลเลกชันได้มากขึ้น
  2. การเปลี่ยนแปลงที่สองคือการใส่คำสั่ง printjson ลงในคำสั่ง forEach ซึ่งจะทำให้เอกสารแต่ละฉบับในคอลเล็กชันแสดงในรูปแบบ JSON

หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้

Output:

การพิมพ์ในรูปแบบ JSON

ผลลัพธ์แสดงให้เห็นชัดเจนว่าเอกสารทั้งหมดพิมพ์ในรูปแบบ JSON

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

ใช่แล้ว การส่งอาร์เรย์ของเอกสารไปยังเมธอด insert() จะเพิ่มเอกสารทั้งหมดในครั้งเดียว การแทรกแบบกลุ่มนี้เร็วกว่าการเรียกใช้ insert() แยกกันสำหรับแต่ละเอกสาร แม้ว่าปัจจุบัน insertMany() จะเป็นวิธีที่นิยมใช้มากกว่าก็ตาม

ใช่แล้ว หากเอกสารไม่มีฟิลด์ _id MongoDB ระบบจะสร้าง ObjectId ที่ไม่ซ้ำกันโดยอัตโนมัติในระหว่างการแทรกข้อมูล ทำให้สามารถระบุและเรียกค้นบันทึกที่จัดเก็บแต่ละรายการได้ในภายหลัง

โดยค่าเริ่มต้น MongoDB ทำการแทรกตามลำดับที่กำหนด โดยจะเพิ่มเอกสารตามลำดับที่ระบุและหยุดเมื่อพบข้อผิดพลาดครั้งแรก ทำให้เอกสารที่เหลือไม่ถูกแทรก การตั้งค่า ordered เป็น false จะทำให้ดำเนินการต่อไปแม้จะพบข้อผิดพลาดแล้วก็ตาม

ใช่แล้ว เครื่องมือ AI สามารถแปลงคำอธิบายข้อมูลของคุณในภาษาธรรมดาให้เป็นคำสั่ง insertOne() หรือ insertMany() รวมถึงอาร์เรย์ที่ฝังอยู่ภายในได้ โปรดตรวจสอบฟิลด์และประเภทข้อมูลที่สร้างขึ้นก่อนนำไปใช้กับฐานข้อมูลเสมอ

AI สามารถแนะนำได้ว่าควรฝังอาร์เรย์ไว้ในเอกสารหรืออ้างอิงคอลเลกชันแยกต่างหาก โดยพิจารณาจากรูปแบบการค้นหาของคุณ ซึ่งจะช่วยให้ผู้เริ่มต้นสร้างแบบจำลองข้อมูลได้อย่างมีประสิทธิภาพ พร้อมทั้งหลีกเลี่ยงการทำซ้ำที่ไม่จำเป็นหรือการซ้อนกันลึกเกินไป

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