การฉายภาพใน MongoDB [พร้อมตัวอย่าง]

เผยแพร่แล้ว: 2020-09-15

MongoDB เป็นหนึ่งในฐานข้อมูลสมัยใหม่ที่มีชื่อเสียงที่สุดในการจัดการและจัดการข้อมูลขนาดใหญ่ เป็นฐานข้อมูลเชิงเอกสาร NoSQL ที่ใช้ JSON เช่นเอกสารเพื่อให้จัดการข้อมูลได้ง่ายขึ้น

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

สารบัญ

การฉายภาพใน MongoDB คืออะไร?

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

ไวยากรณ์ของ Find() Method

การฉายภาพใน MongoDB ทำได้โดยใช้เมธอด find() ซึ่งมีรูปแบบดังนี้:

ฐานข้อมูล collection_name .find({}, { field_Key:1 or 0 })

ในไวยากรณ์ข้างต้น collection_name คือเอกสารที่เราต้องการดึงข้อมูล จากนั้นมีพารามิเตอร์สองตัวในเมธอด find() ตัวแรกยอมรับการสืบค้น และตัวที่สองใช้สำหรับการฉายภาพ field_Key ใน ไวยากรณ์คือชื่อของฟิลด์ที่เราต้องการรวมหรือแยกออก

เราจำเป็นต้องส่งค่าบูลีนสำหรับแต่ละ field_ Key ค่านี้กำหนดว่าเราต้องการรวมฟิลด์หรือไม่รวมฟิลด์นั้น หากเราป้อน 1 กับฟิลด์ใดฟิลด์หนึ่ง ฟิลด์นั้นจะถูกแสดงในผลลัพธ์ และหากเราใส่ 0 ฟิลด์นั้นจะถูกซ่อนไว้

ฐานข้อมูลตัวอย่าง

มาสร้างเอกสารตัวอย่างในฐานข้อมูลเพื่อที่เราจะได้อ้างอิงตลอดทั้งบทความนี้

db.example.studentData([

{_id: ObjectId("59kf63795bc1d"), student_name: “Alexander”, student_id: 01, student_status: “A”, student_age: 22}

{_id: ObjectId("59ke62794bc1d"), student_name: “สตีฟ”, student_id: 02, student_status: “A”, student_age: 23}

{_id: ObjectId("59kg73795bf1e"), student_name: “Luke”, student_id: 03, student_status: “A”, student_age: 21}

{_id: ObjectId(“59kb69995ah1d”), student_name: “Bravo”, student_id: 04, student_status: “B”, student_age: 25}

])

นี่คือเอกสารฐานข้อมูลของเราที่มีชื่อตัวอย่างที่เราจะใช้เป็นข้อมูลอ้างอิงในตัวอย่างทั้งหมดของเรา

การดึงข้อมูลที่มีและไม่มีการฉายภาพใน MongoDB

1. ไวยากรณ์สำหรับการดึงข้อมูลโดยไม่มีการฉายภาพ

กำลังดึงข้อมูลฟิลด์ทั้งหมด (เนื่องจากไม่ได้ใช้การฉายภาพ) ของนักเรียนที่มีสถานะ student_status: “A”

db.example.find({student_status: “A”})

ซึ่งสอดคล้องกับ Select * จากตัวอย่าง WHERE student_status = “A” แบบสอบถามใน SQL การดึงข้อมูลโดยไม่มี การฉายภาพใน MongoDB จะให้ผลลัพธ์ดังต่อไปนี้:

{"_id": ObjectId("59kf63795bc1d"), "student_name": "Alexander", "student_id": 01, "student_status": "A", student_age: 22}

{"_id": ObjectId("59ke62794bc1d"), "student_name": "Steve", "student_id": 02, "student_status": "A", "student_age": 23}

{"_id": ObjectId("59kg73795bf1e"), "student_name": "Luke", "student_id": 03, "student_status": "A", student_age: 21}

โดยค่าเริ่มต้น จะแสดงฟิลด์ทั้งหมดของข้อมูลที่ student_status = “A” เพื่อจำกัดฟิลด์เอาต์พุต เราสามารถใช้ การฉายภาพใน MongoDB

2. ไวยากรณ์สำหรับการดึงข้อมูลด้วยการฉายภาพ

กำลังดึง student_name และ student_status ของนักเรียนทั้งหมด

db.example.find({}, {student_name: 1, student_status: 1})

ซึ่งจะแสดงผลดังต่อไปนี้:

{"_id": ObjectId("59kf63795bc1d"), "student_name": "Alexander", "student_status": "A"}

{“_id”: ObjectId(“59ke62794bc1d”), “student_name”: “สตีฟ”, “student_status”: “A”}

{"_id": ObjectId("59kg73795bf1e"), "student_name": "Luke", "student_status": "A"}

{"_id": ObjectId("59kb69995ah1d"), student_name: "Bravo", student_status: "B"}

_id จะแสดงตามค่าเริ่มต้นในขณะที่ใช้ การฉายภาพใน MongoDB เว้นแต่เราจะระงับ

ระงับ _id ขณะใช้การฉายภาพใน MongoDB

ระงับค่าเริ่มต้น _id และแสดง student_id, student_name และ student_status ของนักเรียนทั้งหมด

db.example.find({}, {_id: 0, student_id: 1, student_name: 1, student_status: 1})

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

{“student_id”: 01, “student_name”: “Alexander”, “student_status”: “A”}

{“student_id”: 02, “student_name”: “สตีฟ”, “student_status”: “A”}

{“student_id”: 03, “student_name”: “Luke”, “student_status”: “A”}

{“student_id”: 04, “student_name”: “Bravo”, student_status: “B”}

3. การรวมการรวมและการยกเว้นเข้าด้วยกัน

ไม่รวม _id และ student_id รวมถึง student_name และ student_status ของนักเรียนทุกคน

db.example.find({}, {_id: 0, student_id: 0, student_name: 1, student_status: 1})

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้:

ข้อผิดพลาด: ข้อผิดพลาด: {

“ waitedMS” : NumberLong(0),

“โอเค” : 0,

“errmsg” : “การฉายภาพไม่สามารถมีการรวมและการยกเว้นได้”,

“รหัส” : 2

}

การรวมการรวมและการยกเว้นในขณะที่ใช้ การฉายภาพ MongoDB จะเกิดข้อผิดพลาดเนื่องจากเราไม่สามารถดำเนินการทั้งสองอย่างในแบบสอบถามเดียวกัน ฟิลด์ _id เป็นข้อยกเว้นสำหรับกฎนี้

คุณจะสังเกตเห็นว่าเราเคยใช้การรวมและการยกเว้นในตัวอย่างก่อนหน้านี้ที่เราระงับ _id และแสดงฟิลด์อื่นๆ และทำงานได้ดี เนื่องจากข้อยกเว้นของกฎ เราจึงยกเว้น _id และรวมฟิลด์ที่เหลือ

4. การระบุการฉายภาพใน MongoDB โดย Exclusion

ไม่รวม _id และ student_status ของนักเรียนทั้งหมดและแสดงช่องอื่นๆ

db.example.find({}, {_id: 0, student_status: 0})

{“student_name”: “Alexander”, “student_id”: 01, “student_age”: 22}

{“student_name”: “สตีฟ”, “student_id”: 02, “student_age”: 23}

{“student_name”: “Luke”, “student_id”: 03, “student_age”: 21}

{"student_name": "Bravo", "student_id": 04, "student_age": 25}

คุณยังสามารถใช้ตัวดำเนินการฉายภาพสี่ตัวเพื่อจำกัดฟิลด์เอาต์พุต แต่เมธอด find() ไม่รองรับพวกมัน ตัวดำเนินการฉายภาพที่สามารถใช้ได้คือ $, $elemMatch, $slice และ $meta

อ่านเพิ่มเติม: กรณีใช้งาน MongoDB โลกแห่งความจริง

บทสรุป

ด้วยการใช้การ ฉายภาพใน MongoDB เราสามารถควบคุมการแสดงข้อมูลในส่วนหน้า ซึ่งจะเพิ่ม กรณีการใช้งาน จริง MongoDB ได้บรรลุเป้าหมายสำคัญหลายประการในช่วงไม่กี่ปีที่ผ่านมา สิ่งนี้ทำให้ ขอบเขตในอนาคตของ MongoDB สดใส และธุรกิจจำนวนมากกำลังมองหานักพัฒนาแบบฟูลสแตกที่มีความรู้เกี่ยวกับ MongoDB

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

พวกเราที่ upGrad จัดหาแหล่งการเรียนรู้โดยละเอียดพร้อมกับประสบการณ์ตรงและความช่วยเหลือในงาน เราได้ร่วมมือกับหลายสถาบันเพื่อให้คุณได้รับการศึกษาและการรับรองที่ดีที่สุด คุณสามารถเลือกได้ว่าต้องการเข้าร่วม หลักสูตรการรับรอง Business Analytics หรือเข้าร่วม หลักสูตร การพัฒนาซอฟต์แวร์แบบครบวงจร PG Diploma ไม่ว่าคุณต้องการประกอบอาชีพอะไรในชีวิตของคุณ เราก็มีไว้ให้คุณ

เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

เป็นผู้นำการปฏิวัติเทคโนโลยีที่ขับเคลื่อนด้วยข้อมูล

โปรแกรมประกาศนียบัตรขั้นสูงด้าน Big Data จาก IIIT Bangalore