MongoDB Ερώτημα ταξινόμησης () & Limit() με σειρά κατά παραδείγματα
⚡ Έξυπνη Σύνοψη
MongoDB Οι τροποποιητές ερωτημάτων Sort() και Limit() ελέγχουν πόσα έγγραφα επιστρέφει ένα ερώτημα και με ποια σειρά. Η μέθοδος limit() περιορίζει τον αριθμό των αποτελεσμάτων, ενώ η sort() ταξινομεί τα έγγραφα σε αύξουσα ή φθίνουσα σειρά χρησιμοποιώντας τιμές 1 ή -1.

Τι είναι οι Τροποποιήσεις ερωτήματος;
Mongo DB παρέχει τροποποιητές ερωτημάτων, όπως η ρήτρα 'όριο' και 'Παραγγελίες' για να παρέχει μεγαλύτερη ευελιξία κατά την εκτέλεση ερωτημάτων. Θα ρίξουμε μια ματιά στους ακόλουθους τροποποιητές ερωτήματος
MongoDB Περιορίστε τα αποτελέσματα ερωτημάτων
Αυτός ο τροποποιητής χρησιμοποιείται για τον περιορισμό του αριθμού των εγγράφων που επιστρέφονται στο σύνολο αποτελεσμάτων για ένα ερώτημα. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.
db.Employee.find().limit(2).forEach(printjson);
Code εξήγηση
- Ο παραπάνω κώδικας παίρνει τη συνάρτηση εύρεσης που επιστρέφει όλα τα έγγραφα της συλλογής, αλλά στη συνέχεια χρησιμοποιεί την ρήτρα ορίου για να περιορίσει τον αριθμό των εγγράφων που επιστρέφονται σε μόλις 2.
Παραγωγή
Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί η ακόλουθη έξοδος
Η έξοδος δείχνει ξεκάθαρα ότι εφόσον υπάρχει ένας τροποποιητής ορίου, άρα το πολύ 2 εγγραφές επιστρέφονται ως μέρος του συνόλου αποτελεσμάτων με βάση το ObjectId σε αύξουσα σειρά.
MongoDB Ταξινόμηση κατά Φθίνουσα Σειρά
Κάποιος μπορεί να καθορίσει τη σειρά των εγγράφων που θα επιστραφούν με βάση την αύξουσα ή φθίνουσα σειρά οποιουδήποτε κλειδιού στη συλλογή. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.
db.Employee.find().sort({Employeeid:-1}).forEach(printjson)
Code εξήγηση
- Ο παραπάνω κώδικας παίρνει τη συνάρτηση ταξινόμησης που επιστρέφει όλα τα έγγραφα της συλλογής αλλά στη συνέχεια χρησιμοποιεί τον τροποποιητή για να αλλάξει τη σειρά με την οποία επιστρέφονται οι εγγραφές. Εδώ το -1 υποδεικνύει ότι θέλουμε να επιστρέψουμε τα έγγραφα με βάση τη φθίνουσα σειρά του Employee id.
Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί η ακόλουθη έξοδος
Παραγωγή
Η έξοδος δείχνει ξεκάθαρα τα έγγραφα που επιστρέφονται με φθίνουσα σειρά του Employeeid.
Η αύξουσα σειρά ορίζεται από την τιμή 1.
MongoDB Ταξινόμηση κατά Αύξουσα Σειρά
Όπως ακριβώς η συνάρτηση sort() μπορεί να επιστρέψει έγγραφα σε φθίνουσα σειρά, μπορεί επίσης να τα επιστρέψει σε αύξουσα σειρά. Η αύξουσα σειρά ορίζεται από την τιμή 1 στο αντικείμενο ταξινόμησης. Αυτό ταξινομεί τα έγγραφα από τη μικρότερη τιμή στη μεγαλύτερη, κάτι που είναι χρήσιμο για την καταχώριση εγγραφών από την παλαιότερη στη νεότερη ή από το Α έως το Ω.
Το ακόλουθο παράδειγμα ταξινομεί κάθε έγγραφο υπαλλήλου κατά EmployeeID σε αύξουσα σειρά:
db.Employee.find().sort({Employeeid:1}).forEach(printjson)
Δείτε πώς λειτουργεί το ερώτημα:
- Η find() ανακτά όλα τα έγγραφα στη συλλογή Employee.
- Η συνάρτηση sort({Employeeid:1}) ταξινομεί τα αποτελέσματα με βάση το πεδίο Employeeid, από το χαμηλότερο 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 ταξινομεί κατά το πρώτο πεδίο, στη συνέχεια χρησιμοποιεί το επόμενο πεδίο για να σπάσει τους δεσμούς, και ούτω καθεξής.
Το ακόλουθο παράδειγμα ταξινομεί τους υπαλλήλους κατά όνομα σε αύξουσα σειρά και για τους υπαλλήλους με το ίδιο όνομα, κατά EmployeeID σε φθίνουσα σειρά:
db.Employee.find().sort({EmployeeName:1, Employeeid:-1}).forEach(printjson)
Η σειρά των κλειδιών στο αντικείμενο ταξινόμησης έχει σημασία: Το EmployeeName εφαρμόζεται πρώτο επειδή εμφανίζεται πρώτο. Αυτή η ταξινόμηση πολλαπλών κλειδιών είναι χρήσιμη για αναφορές όπου ομαδοποιείτε κατά ένα πεδίο και στη συνέχεια κατατάσσετε τα στοιχεία εντός κάθε ομάδας. Για την καλύτερη απόδοση σε μεγάλες συλλογές, δημιουργήστε ένα σύνθετο ευρετήριο που ταιριάζει με τα πεδία και τις οδηγίες που χρησιμοποιούνται στην ταξινόμηση.


