MongoDB Ερώτημα ταξινόμησης () & Limit() με σειρά κατά παραδείγματα

⚡ Έξυπνη Σύνοψη

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

  • 🔢 Όρια αποτελέσματα: Η μέθοδος limit() περιορίζει τον αριθμό των εγγράφων που επιστρέφει ένα ερώτημα, για παράδειγμα η μέθοδος limit(2) επιστρέφει δύο εγγραφές.
  • (Π.χ. Φθίνουσα Ταξινόμηση: Η συνάρτηση sort({field:-1}) επιστρέφει έγγραφα κατά φθίνουσα σειρά του επιλεγμένου πεδίου.
  • ⬆️ Αύξουσα Ταξινόμηση: Η συνάρτηση sort({field:1}) επιστρέφει έγγραφα σε αύξουσα σειρά, η οποία είναι και η προεπιλεγμένη κατεύθυνση.
  • ⏭️ Παράλειψη για σελιδοποίηση: Η μέθοδος skip() αγνοεί έναν αριθμό εγγράφων και, σε συνδυασμό με την limit(), δημιουργεί σελιδοποίηση.
  • 🧷 Πολλαπλά κλειδιά: Η sort() δέχεται πολλά πεδία, ταξινομώντας με βάση το πρώτο κλειδί και σπάζοντας τους δεσμούς με το επόμενο.
  • 🖨️ Readable Παραγωγή: Η αλυσιδωτή σύνδεση forEach(printjson) εκτυπώνει κάθε επιστρεφόμενο έγγραφο σε καθαρή μορφή JSON.

MongoDB Ερώτημα Sort() & Limit()

Τι είναι οι Τροποποιήσεις ερωτήματος;

Mongo DB παρέχει τροποποιητές ερωτημάτων, όπως η ρήτρα 'όριο' και 'Παραγγελίες' για να παρέχει μεγαλύτερη ευελιξία κατά την εκτέλεση ερωτημάτων. Θα ρίξουμε μια ματιά στους ακόλουθους τροποποιητές ερωτήματος

MongoDB Περιορίστε τα αποτελέσματα ερωτημάτων

Αυτός ο τροποποιητής χρησιμοποιείται για τον περιορισμό του αριθμού των εγγράφων που επιστρέφονται στο σύνολο αποτελεσμάτων για ένα ερώτημα. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.

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

Code εξήγηση

  • Ο παραπάνω κώδικας παίρνει τη συνάρτηση εύρεσης που επιστρέφει όλα τα έγγραφα της συλλογής, αλλά στη συνέχεια χρησιμοποιεί την ρήτρα ορίου για να περιορίσει τον αριθμό των εγγράφων που επιστρέφονται σε μόλις 2.

Παραγωγή

Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί η ακόλουθη έξοδος

MongoDB Περιορίστε τα αποτελέσματα ερωτημάτων

Η έξοδος δείχνει ξεκάθαρα ότι εφόσον υπάρχει ένας τροποποιητής ορίου, άρα το πολύ 2 εγγραφές επιστρέφονται ως μέρος του συνόλου αποτελεσμάτων με βάση το ObjectId σε αύξουσα σειρά.

MongoDB Ταξινόμηση κατά Φθίνουσα Σειρά

Κάποιος μπορεί να καθορίσει τη σειρά των εγγράφων που θα επιστραφούν με βάση την αύξουσα ή φθίνουσα σειρά οποιουδήποτε κλειδιού στη συλλογή. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.

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

Code εξήγηση

  • Ο παραπάνω κώδικας παίρνει τη συνάρτηση ταξινόμησης που επιστρέφει όλα τα έγγραφα της συλλογής αλλά στη συνέχεια χρησιμοποιεί τον τροποποιητή για να αλλάξει τη σειρά με την οποία επιστρέφονται οι εγγραφές. Εδώ το -1 υποδεικνύει ότι θέλουμε να επιστρέψουμε τα έγγραφα με βάση τη φθίνουσα σειρά του Employee id.

Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί η ακόλουθη έξοδος

Παραγωγή

MongoDB Ταξινόμηση κατά Φθίνουσα Σειρά

Η έξοδος δείχνει ξεκάθαρα τα έγγραφα που επιστρέφονται με φθίνουσα σειρά του 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)

Για να δημιουργήσετε πλοήγηση σελίδα προς σελίδα, ακολουθήστε αυτό το μοτίβο:

  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 ταξινομεί κατά το πρώτο πεδίο, στη συνέχεια χρησιμοποιεί το επόμενο πεδίο για να σπάσει τους δεσμούς, και ούτω καθεξής.

Το ακόλουθο παράδειγμα ταξινομεί τους υπαλλήλους κατά όνομα σε αύξουσα σειρά και για τους υπαλλήλους με το ίδιο όνομα, κατά EmployeeID σε φθίνουσα σειρά:

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

Η σειρά των κλειδιών στο αντικείμενο ταξινόμησης έχει σημασία: Το EmployeeName εφαρμόζεται πρώτο επειδή εμφανίζεται πρώτο. Αυτή η ταξινόμηση πολλαπλών κλειδιών είναι χρήσιμη για αναφορές όπου ομαδοποιείτε κατά ένα πεδίο και στη συνέχεια κατατάσσετε τα στοιχεία εντός κάθε ομάδας. Για την καλύτερη απόδοση σε μεγάλες συλλογές, δημιουργήστε ένα σύνθετο ευρετήριο που ταιριάζει με τα πεδία και τις οδηγίες που χρησιμοποιούνται στην ταξινόμηση.

Συχνές Ερωτήσεις

Χωρίς ταξινόμηση(), MongoDB Επιστρέφει έγγραφα με φυσική σειρά, η οποία συνήθως αντικατοπτρίζει τη σειρά τους στο δίσκο και δεν είναι εγγυημένη. Για μια προβλέψιμη σειρά, προσθέστε πάντα μια ρητή sort() σε ένα πεδίο όπως _id.

Λογικά, MongoDB Η συνάρτηση sort() εφαρμόζει πάντα πριν από την limit(), ανεξάρτητα από τη σειρά που τα τοποθετείτε σε αλυσίδα. Αυτό σημαίνει ότι η συνάρτηση limit() επιστρέφει τα κορυφαία έγγραφα του ταξινομημένου αποτελέσματος, όχι ένα τυχαίο υποσύνολο που στη συνέχεια ταξινομείται.

Η ταξινόμηση μεγάλων συνόλων αποτελεσμάτων χωρίς ευρετήριο επιβάλλει μια ταξινόμηση εντός της μνήμης, η οποία αποτυγχάνει όταν υπερβεί το όριο μνήμης. Η δημιουργία ενός ευρετηρίου στο πεδίο ταξινόμησης επιτρέπει MongoDB επιστρέψτε τα ταξινομημένα αποτελέσματα αποτελεσματικά.

Η Τεχνητή Νοημοσύνη μπορεί να μετατρέψει ένα απλό αίτημα όπως «νεότεροι πέντε υπάλληλοι» σε ένα ερώτημα find().sort().limit() με τη σωστή κατεύθυνση και αριθμό. Εξηγεί επίσης κάθε τροποποιητή, ώστε οι αρχάριοι να μάθουν το μοτίβο.

Ναι. Η τεχνητή νοημοσύνη μπορεί να επιθεωρήσει ένα σχέδιο ερωτημάτων, να εντοπίσει ταξινομήσεις εντός μνήμης και να προτείνει το ευρετήριο που απαιτείται για την υποστήριξη της ταξινόμησης. Αυτό βοηθά τους προγραμματιστές να επιταχύνουν την ταξινόμηση και να περιορίσουν τα ερωτήματα σε μεγάλες συλλογές.

Συνοψίστε αυτήν την ανάρτηση με: