MongoDB เรียงลำดับ () & จำกัด () แบบสอบถามโดยเรียงลำดับตามตัวอย่าง

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

MongoDB ตัวแก้ไขการค้นหา Sort() และ Limit() ควบคุมจำนวนเอกสารที่การค้นหาส่งคืนและลำดับการจัดเรียง เมธอด limit() จะจำกัดจำนวนผลลัพธ์สูงสุด ในขณะที่ sort() จะจัดเรียงเอกสารตามลำดับจากน้อยไปมากหรือจากมากไปน้อยโดยใช้ค่า 1 หรือ -1

  • 🔢 จำกัดผลลัพธ์: เมธอด limit() จะจำกัดจำนวนเอกสารที่การค้นหาจะส่งคืน ตัวอย่างเช่น limit(2) จะส่งคืนสองรายการ
  • ⬇️ เรียงลำดับจากมากไปน้อย: sort({field:-1}) จะส่งคืนเอกสารตามลำดับจากมากไปน้อยของฟิลด์ที่เลือก
  • ⬆️ เรียงลำดับจากน้อยไปมาก: sort({field:1}) จะส่งคืนเอกสารตามลำดับจากน้อยไปมาก ซึ่งเป็นทิศทางเริ่มต้นด้วย
  • ⏭️ ข้ามเพื่อไปยังหน้าถัดไป: เมธอด skip() จะละเว้นเอกสารจำนวนหนึ่ง และเมื่อใช้ร่วมกับ limit() จะสร้างการแบ่งหน้า (pagination)
  • 🧷 ปุ่มหลายปุ่ม: ฟังก์ชัน sort() รับค่าได้หลายฟิลด์ โดยจะเรียงลำดับตามคีย์แรก และหากมีค่าเท่ากัน จะใช้คีย์ถัดไปเป็นตัวตัดสิน
  • 🖨️ Readable Output: การใช้ forEach(printjson) ต่อเนื่องกันจะพิมพ์เอกสารแต่ละฉบับที่ส่งคืนมาในรูปแบบ JSON ที่สะอาดตา

MongoDB คิวรี Sort() และ Limit()

การปรับเปลี่ยนแบบสอบถามคืออะไร?

Mongo DB มีตัวปรับแต่งแบบสอบถาม เช่น คำสั่ง 'limit' และ 'Orders' เพื่อให้มีความยืดหยุ่นมากขึ้นเมื่อดำเนินการแบบสอบถาม เราจะมาดูตัวปรับแต่งแบบสอบถามต่อไปนี้

MongoDB จำกัดผลลัพธ์การค้นหา

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

db.Employee.find().limit(2).forEach(printjson);

Code คำอธิบาย

  • โค้ดด้านบนใช้ฟังก์ชัน find ซึ่งส่งคืนเอกสารทั้งหมดในคอลเลกชัน แต่จากนั้นใช้คำสั่งจำกัดเพื่อจำกัดจำนวนเอกสารที่ส่งคืนเพียง 2

เอาท์พุต

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

MongoDB จำกัดผลลัพธ์การค้นหา

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

MongoDB เรียงตามลำดับจากมากไปน้อย

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

db.Employee.find().sort({Employeeid:-1}).forEach(printjson)

Code คำอธิบาย

  • โค้ดด้านบนใช้ฟังก์ชันการเรียงลำดับซึ่งส่งคืนเอกสารทั้งหมดในคอลเลกชัน แต่จากนั้นใช้ตัวแก้ไขเพื่อเปลี่ยนลำดับการส่งคืนระเบียน ที่นี่ -1 ระบุว่าเราต้องการส่งคืนเอกสารตามลำดับจากมากไปหาน้อยของรหัสพนักงาน

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

เอาท์พุต

MongoDB เรียงตามลำดับจากมากไปน้อย

ผลลัพธ์จะแสดงเอกสารที่ส่งคืนอย่างชัดเจนโดยเรียงลำดับจากมากไปหาน้อยของ Employeeid

ลำดับจากน้อยไปหามากถูกกำหนดโดยค่า 1

MongoDB เรียงลำดับจากน้อยไปมาก

เช่นเดียวกับที่ฟังก์ชัน sort() สามารถส่งคืนเอกสารในลำดับจากมากไปน้อยได้ ฟังก์ชันนี้ยังสามารถส่งคืนเอกสารในลำดับจากน้อยไปมากได้ด้วย โดยลำดับจากน้อยไปมากจะถูกกำหนดโดยค่า 1 ในอ็อบเจ็กต์ sort ซึ่งจะจัดเรียงเอกสารจากค่าที่น้อยที่สุดไปยังค่าที่มากที่สุด ซึ่งมีประโยชน์สำหรับการแสดงรายการบันทึกจากเก่าที่สุดไปใหม่ที่สุด หรือจาก A ไป Z

ตัวอย่างต่อไปนี้จะเรียงลำดับเอกสารของพนักงานทุกคนตามรหัสพนักงานจากน้อยไปมาก:

db.Employee.find().sort({Employeeid:1}).forEach(printjson)

วิธีการทำงานของคำสั่งค้นหามีดังนี้:

  • find() จะดึงเอกสารทั้งหมดในคอลเลกชัน Employee
  • sort({Employeeid:1}) จะเรียงลำดับผลลัพธ์ตามฟิลด์ Employeeid จาก id ที่ต่ำที่สุดไปจนถึง id ที่สูงสุด
  • forEach(printjson) จะพิมพ์เอกสารแต่ละฉบับในรูปแบบ JSON ที่อ่านง่าย

เมื่อคุณรันคำสั่งนี้ เอกสารจะปรากฏในลำดับที่เพิ่มขึ้นตาม Employeeid ลำดับจากน้อยไปมากเป็นค่าเริ่มต้น ดังนั้นการปล่อยค่าไว้ที่ 1 จะทำให้ได้ลำดับจากน้อยไปมากตามฟิลด์ที่เลือก หากต้องการกลับลำดับ ให้เปลี่ยนค่าจาก 1 เป็น -1 และคุณยังสามารถใช้ limit() ต่อท้ายเพื่อแสดงเฉพาะระเบียนที่เรียงลำดับแล้วไม่กี่รายการแรกได้อีกด้วย

MongoDB Skip() สำหรับการแบ่งหน้า

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

ตัวอย่างต่อไปนี้จะข้ามพนักงานสองคนแรกและแสดงผลลัพธ์เป็นพนักงานสองคนถัดไป:

db.Employee.find().skip(2).limit(2).forEach(printjson)

ในการสร้างระบบนำทางแบบทีละหน้า ให้ทำตามรูปแบบนี้:

  1. กำหนดขนาดหน้ากระดาษ เช่น 2 เอกสารต่อหน้า
  2. นำขนาดหน้ากระดาษคูณด้วยหมายเลขหน้าลบหนึ่ง เพื่อหาค่าการข้ามหน้า
  3. ส่งค่าดังกล่าวไปยัง skip() และส่งขนาดหน้าไปยัง limit()

ตัวอย่างเช่น หน้า 1 ใช้ skip(0).limit(2), หน้า 2 ใช้ skip(2).limit(2), และหน้า 3 ใช้ skip(4).limit(2) ควรเพิ่ม sort() ด้วยเสมอ เพื่อให้ลำดับของเอกสารคงที่ในทุกหน้า โปรดทราบว่าค่า skip ที่มากเกินไปอาจทำให้การประมวลผลช้าลงในชุดข้อมูลขนาดใหญ่ เนื่องจาก MongoDB ระบบยังคงสแกนและตัดเอกสารที่ข้ามไปทิ้ง การแบ่งหน้าตามช่วงจะเร็วกว่าเมื่อใช้งานในปริมาณมาก

เรียงลำดับตามหลายฟิลด์ใน MongoDB

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

ตัวอย่างต่อไปนี้เรียงลำดับพนักงานตามชื่อจากน้อยไปมาก และสำหรับพนักงานที่มีชื่อเดียวกัน จะเรียงลำดับตามรหัสพนักงานจากมากไปน้อย:

db.Employee.find().sort({EmployeeName:1, Employeeid:-1}).forEach(printjson)

ลำดับของคีย์ในออบเจ็กต์การเรียงลำดับมีความสำคัญ: EmployeeName จะถูกนำมาใช้ก่อนเพราะปรากฏเป็นอันดับแรก การเรียงลำดับแบบหลายคีย์นี้มีประโยชน์สำหรับรายงานที่คุณจัดกลุ่มตามฟิลด์เดียวแล้วจัดอันดับภายในแต่ละกลุ่ม เพื่อประสิทธิภาพที่ดีที่สุดในการจัดการกับชุดข้อมูลขนาดใหญ่ ให้สร้างดัชนีแบบผสมที่ตรงกับฟิลด์และทิศทางที่ใช้ในการเรียงลำดับ

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

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

เหตุผล MongoDB ฟังก์ชัน `sort()` จะถูกเรียกใช้ก่อน `limit()` เสมอ โดยไม่คำนึงถึงลำดับการเรียกใช้ นั่นหมายความว่า `limit()` จะส่งคืนเอกสารอันดับต้น ๆ ของผลลัพธ์ที่เรียงลำดับแล้ว ไม่ใช่ชุดย่อยแบบสุ่มแล้วนำมาเรียงลำดับอีกครั้ง

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

AI สามารถแปลงคำขอธรรมดาๆ เช่น 'พนักงานใหม่ล่าสุด 5 คน' ให้เป็นคำสั่ง find().sort().limit() พร้อมทิศทางและจำนวนที่ถูกต้องได้ นอกจากนี้ยังอธิบายตัวดัดแปลงแต่ละตัวเพื่อให้ผู้เริ่มต้นเรียนรู้รูปแบบได้ง่าย

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

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