MongoDB เอกสารแบบสอบถาม: db.collection.find() พร้อมตัวอย่าง

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

MongoDB การดำเนินการค้นหาเอกสารจะดึงข้อมูลจากคอลเลกชันโดยใช้ฟังก์ชัน db.collection.find() โดยค่าเริ่มต้น เมธอดนี้จะส่งคืนเอกสารทั้งหมด รองรับเกณฑ์การกรอง เช่น การจับคู่ฟิลด์ และตัวดำเนินการ $gt และจัดรูปแบบผลลัพธ์ด้วยคำสั่ง forEach(printjson)

  • 🔍 ฟังก์ชัน find(): เมธอด db.collection.find() ใช้สำหรับดึงเอกสารจากคอลเลกชัน MongoDB การรวบรวมข้อมูล จะส่งคืนเอกสารทั้งหมดเมื่อไม่มีการระบุตัวกรอง
  • 🎯 เกณฑ์การกรอง: การส่งออบเจ็กต์คำค้นหา เช่น {EmployeeName: “Smith”} จะส่งคืนเฉพาะเอกสารที่ตรงกับเงื่อนไขเท่านั้น
  • สอบถาม Operaทอร์: ตัวดำเนินการเลือก เช่น $gt, $lt และ $in ช่วยปรับปรุงผลลัพธ์ให้ละเอียดขึ้น ตัวอย่างเช่น การค้นหาพนักงานที่มีรหัสมากกว่า 2
  • 🖨️ Readable Output: การใช้ forEach(printjson) ต่อเนื่องกัน จะพิมพ์เอกสารที่ส่งคืนแต่ละรายการในรูปแบบ JSON ที่สะอาดตา
  • 🧾 ฉาย: อาร์กิวเมนต์ตัวที่สองของ find() จะเลือกฟิลด์ที่จะรวมหรือยกเว้นจากผลลัพธ์

วิธีการดึงหรือรับข้อมูลจาก MongoDB ฐานข้อมูลจะดำเนินการโดยใช้ MongoDB การสอบถาม ในขณะดำเนินการสอบถาม ผู้ใช้สามารถกำหนดเกณฑ์หรือเงื่อนไขเพื่อดึงข้อมูลเฉพาะจากฐานข้อมูลได้

MongoDB จัดเตรียมฟังก์ชันที่เรียกว่า db.collection.find() ซึ่งใช้ในการดึงเอกสารจากก MongoDB ฐานข้อมูล

ในระหว่างนี้ MongoDB บทช่วยสอนเกี่ยวกับแบบสอบถาม คุณจะเห็นว่าฟังก์ชันนี้ถูกนำมาใช้ในรูปแบบต่างๆ อย่างไรเพื่อให้บรรลุวัตถุประสงค์ในการเรียกค้นเอกสาร

db.collection.find() คืออะไรใน MongoDB?

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

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

MongoDB แบบสอบถามพื้นฐาน Operations

พื้นฐาน MongoDB ตัวดำเนินการสอบถามครอบคลุมการดำเนินการง่ายๆ เช่น การรับเอกสารทั้งหมดใน MongoDB ของสะสม. ลองดูตัวอย่าง db.collection.find ว่าเราจะทำให้สิ่งนี้สำเร็จได้อย่างไร

รหัสทั้งหมดของเราจะถูกรันใน MongoDB Javaต้นฉบับ เชลล์คำสั่ง พิจารณาว่าเรามีคอลเลกชันชื่อ 'พนักงาน' อยู่ในของเรา MongoDB ฐานข้อมูลและเราดำเนินการคำสั่งด้านล่าง

MongoDB แบบสอบถามพื้นฐาน Operations
MongoDB การดำเนินการสอบถามข้อมูลพื้นฐาน

Code คำอธิบาย:

  1. Employee คือชื่อคอลเลกชันใน MongoDB ฐานข้อมูล
  2. การขอ MongoDB find query เป็นฟังก์ชันในตัวที่ใช้ในการดึงเอกสารในคอลเลกชัน

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

Output:

MongoDB แบบสอบถามพื้นฐาน Operations

ผลลัพธ์จะแสดงเอกสารทั้งหมดที่มีอยู่ในคอลเลกชัน

นอกจากนี้เรายังสามารถเพิ่มเกณฑ์ในการสืบค้นของเราเพื่อให้เราสามารถดึงเอกสารตามเงื่อนไขบางประการได้

MongoDB ตัวอย่างแบบสอบถาม – 1

ลองดูสองสามอย่าง MongoDB สอบถามตัวอย่างว่าเราจะทำให้สิ่งนี้สำเร็จได้อย่างไร

db.Employee.find({EmployeeName : "Smith"}).forEach(printjson);

Code คำอธิบาย:

  1. ที่นี่เราต้องการค้นหาพนักงานชื่อ "Smith" ในคอลเลกชัน ดังนั้นเราจึงป้อนเกณฑ์ตัวกรองเป็น EmployeeName : "Smith"

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

Output:

MongoDB ตัวอย่างแบบสอบถาม

ผลลัพธ์จะแสดงเฉพาะเอกสารที่มี "Smith" เป็นชื่อพนักงานเท่านั้นที่จะถูกส่งกลับ

MongoDB ตัวอย่างแบบสอบถาม – 2

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

db.Employee.find({Employeeid : {$gt:2}}).forEach(printjson);

Code คำอธิบาย:

  1. เราต้องการค้นหาพนักงานทั้งหมดที่มี ID มากกว่า 2 $gt เรียกว่าตัวดำเนินการเลือกแบบสอบถาม และสิ่งที่หมายถึงคือการใช้นิพจน์ที่มากกว่า

ถ้า MongoDB คำสั่ง select fields ดำเนินการสำเร็จแล้ว ผลลัพธ์จะแสดงดังนี้

Output:

MongoDB ตัวอย่างแบบสอบถาม

เอกสารทั้งหมดที่มีรหัสพนักงานมากกว่า 2 จะถูกส่งกลับ

MongoDB สอบถาม Operaโปร

MongoDB กรองเอกสารโดยใช้ตัวดำเนินการเลือกคำค้นหาภายในเกณฑ์ find() ตัวดำเนินการเหล่านี้ช่วยให้คุณจับคู่ช่วง รายการ และการปฏิเสธ แทนที่จะจับคู่เฉพาะค่าที่ตรงกันทุกประการ ตารางด้านล่างแสดงรายการตัวดำเนินการที่ใช้บ่อยที่สุด:

OperaTor ความหมาย ตัวอย่าง
$gt มากกว่า {รหัสพนักงาน: {$gt: 2}}
$lt Less กว่า {Employeeid: {$lt: 5}}
$gte มากกว่าหรือเท่ากับ {อายุ: {$gte: 18}}
$lte Less มากกว่าหรือเท่ากับ {อายุ: {$lte: 60}}
$เน ไม่เท่ากับ {สถานะ: {$ne: “ใช้งานอยู่”}}
$ ใน ตรงกับค่าใดๆ ในรายการ {แผนก: {$in: [“HR”,“IT”]}}

นอกจากนี้ คุณยังสามารถรวมเงื่อนไขต่างๆ ด้วย $and และ $or เพื่อสร้างคำสั่งค้นหาที่แม่นยำยิ่งขึ้น การเลือกตัวดำเนินการที่เหมาะสมจะช่วยให้การค้นหามีประสิทธิภาพและส่งคืนเฉพาะเอกสารที่แอปพลิเคชันของคุณต้องการเท่านั้น

วิธีใช้ Projection ร่วมกับ find()

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

หากต้องการรวมเฉพาะฟิลด์ที่ระบุ ให้ตั้งค่าฟิลด์เหล่านั้นเป็น 1 ในออบเจ็กต์การฉายภาพ แบบสอบถามต่อไปนี้จะส่งคืนเฉพาะฟิลด์ EmployeeName สำหรับทุกเอกสาร:

db.Employee.find({}, {EmployeeName: 1}).forEach(printjson);

MongoDB ฟังก์ชันนี้จะส่งคืนฟิลด์ _id เสมอ เว้นแต่คุณจะยกเว้นโดยชัดเจน หากต้องการซ่อนฟิลด์นี้ ให้ตั้งค่า _id เป็น 0:

db.Employee.find({}, {EmployeeName: 1, _id: 0}).forEach(printjson);

นอกจากนี้ คุณยังสามารถยกเว้นฟิลด์แทนที่จะรวมฟิลด์เหล่านั้นได้โดยการตั้งค่าฟิลด์เหล่านั้นเป็น 0 ตัวอย่างเช่น คำสั่งค้นหาด้านล่างจะส่งคืนทุกฟิลด์ยกเว้น Employeeid:

db.Employee.find({}, {Employeeid: 0}).forEach(printjson);

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

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

find() จะส่งคืนเคอร์เซอร์ไปยังเอกสารทั้งหมดที่ตรงกับเงื่อนไขการค้นหา ดังนั้นจึงอาจส่งคืนผลลัพธ์ได้หลายรายการ ส่วน findOne() จะส่งคืนเฉพาะเอกสารแรกที่ตรงกับเงื่อนไขการค้นหาเป็นอ็อบเจ็กต์เดียว หรือส่งคืนค่า null หากไม่มีเอกสารใดตรงกับเงื่อนไข

ใช้เมธอด sort() และ limit() ต่อท้ายเคอร์เซอร์ของ find() ตัวอย่างเช่น find().sort({age:1}).limit(5) จะคืนค่าเรคอร์ดที่อายุน้อยที่สุดห้าอันดับแรก ใช้ 1 สำหรับลำดับจากน้อยไปมาก และ -1 สำหรับลำดับจากมากไปน้อยใน sort()

ใช้เมธอด countDocuments() ร่วมกับตัวกรองเดียวกัน เช่น db.Employee.countDocuments({EmployeeName:”Smith”}) เมธอดนี้จะคืนค่าจำนวนเอกสารที่ตรงกันโดยไม่ต้องดึงข้อมูลเอกสารทั้งหมด ซึ่งเร็วกว่าการอ่านและนับชุดผลลัพธ์ทั้งหมด

AI สามารถแปลงคำขอที่เป็นภาษาธรรมดาให้เป็นคำสั่ง find() ที่มีตัวดำเนินการและการเลือกข้อมูลที่ถูกต้อง และอธิบายแต่ละส่วนได้ ควรทดสอบคำสั่งกับข้อมูลตัวอย่างก่อนใช้งานจริงเสมอ

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

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