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

การปรับเปลี่ยนแบบสอบถามคืออะไร?
Mongo DB มีตัวปรับแต่งแบบสอบถาม เช่น คำสั่ง 'limit' และ 'Orders' เพื่อให้มีความยืดหยุ่นมากขึ้นเมื่อดำเนินการแบบสอบถาม เราจะมาดูตัวปรับแต่งแบบสอบถามต่อไปนี้
MongoDB จำกัดผลลัพธ์การค้นหา
ตัวปรับเปลี่ยนนี้ใช้เพื่อจำกัดจำนวนเอกสารที่ส่งคืนในชุดผลลัพธ์สำหรับแบบสอบถาม ตัวอย่างต่อไปนี้จะแสดงวิธีดำเนินการนี้
db.Employee.find().limit(2).forEach(printjson);
Code คำอธิบาย
- โค้ดด้านบนใช้ฟังก์ชัน find ซึ่งส่งคืนเอกสารทั้งหมดในคอลเลกชัน แต่จากนั้นใช้คำสั่งจำกัดเพื่อจำกัดจำนวนเอกสารที่ส่งคืนเพียง 2
เอาท์พุต
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้
เอาต์พุตแสดงให้เห็นอย่างชัดเจนว่าเนื่องจากมีตัวแก้ไขขีดจำกัด ดังนั้นมีเพียง 2 เรกคอร์ดเท่านั้นที่จะถูกส่งกลับเป็นส่วนหนึ่งของชุดผลลัพธ์โดยยึดตาม ObjectId ตามลำดับจากน้อยไปหามาก
MongoDB เรียงตามลำดับจากมากไปน้อย
คุณสามารถระบุลำดับของเอกสารที่จะส่งคืนโดยเรียงตามลำดับจากน้อยไปมากหรือจากมากไปน้อยของคีย์ใดๆ ในคอลเล็กชัน ตัวอย่างต่อไปนี้จะแสดงวิธีการดำเนินการนี้
db.Employee.find().sort({Employeeid:-1}).forEach(printjson)
Code คำอธิบาย
- โค้ดด้านบนใช้ฟังก์ชันการเรียงลำดับซึ่งส่งคืนเอกสารทั้งหมดในคอลเลกชัน แต่จากนั้นใช้ตัวแก้ไขเพื่อเปลี่ยนลำดับการส่งคืนระเบียน ที่นี่ -1 ระบุว่าเราต้องการส่งคืนเอกสารตามลำดับจากมากไปหาน้อยของรหัสพนักงาน
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้
เอาท์พุต
ผลลัพธ์จะแสดงเอกสารที่ส่งคืนอย่างชัดเจนโดยเรียงลำดับจากมากไปหาน้อยของ 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)
ในการสร้างระบบนำทางแบบทีละหน้า ให้ทำตามรูปแบบนี้:
- กำหนดขนาดหน้ากระดาษ เช่น 2 เอกสารต่อหน้า
- นำขนาดหน้ากระดาษคูณด้วยหมายเลขหน้าลบหนึ่ง เพื่อหาค่าการข้ามหน้า
- ส่งค่าดังกล่าวไปยัง 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 จะถูกนำมาใช้ก่อนเพราะปรากฏเป็นอันดับแรก การเรียงลำดับแบบหลายคีย์นี้มีประโยชน์สำหรับรายงานที่คุณจัดกลุ่มตามฟิลด์เดียวแล้วจัดอันดับภายในแต่ละกลุ่ม เพื่อประสิทธิภาพที่ดีที่สุดในการจัดการกับชุดข้อมูลขนาดใหญ่ ให้สร้างดัชนีแบบผสมที่ตรงกับฟิลด์และทิศทางที่ใช้ในการเรียงลำดับ


