MongoDB อาร์เรย์ของวัตถุโดยใช้ insert() พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
MongoDB การใช้ Array of Objects ร่วมกับ insert() แสดงวิธีการเพิ่มเอกสารหลายรายการลงในคอลเลกชันในการดำเนินการเดียว โดยจะจัดเก็บอาร์เรย์ของข้อมูลพนักงาน ฝังอาร์เรย์ไว้ในเอกสาร และแสดงผลลัพธ์อย่างเรียบร้อยโดยใช้ฟังก์ชัน print ของ 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);
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้
ผลลัพธ์แสดงว่ามีการเพิ่มเอกสารทั้ง 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 คำอธิบาย:
- การเปลี่ยนแปลงแรกคือการเพิ่มฟังก์ชัน forEach() เข้าไปในฟังก์ชัน find() ซึ่งจะทำให้แน่ใจว่าได้วนไปตรวจสอบเอกสารแต่ละฉบับในคอลเลกชันอย่างชัดเจน ด้วยวิธีนี้ คุณจะมีควบคุมการทำงานกับเอกสารแต่ละฉบับในคอลเลกชันได้มากขึ้น
- การเปลี่ยนแปลงที่สองคือการใส่คำสั่ง printjson ลงในคำสั่ง forEach ซึ่งจะทำให้เอกสารแต่ละฉบับในคอลเล็กชันแสดงในรูปแบบ JSON
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้
Output:
ผลลัพธ์แสดงให้เห็นชัดเจนว่าเอกสารทั้งหมดพิมพ์ในรูปแบบ JSON


