Κανονική έκφραση MongoDB (Regex) με παραδείγματα

Οι τακτικές εκφράσεις χρησιμοποιούνται για την αντιστοίχιση μοτίβων, η οποία είναι βασικά για συμβολοσειρές ευρημάτων εντός εγγράφων.

Μερικές φορές κατά την ανάκτηση εγγράφων σε μια συλλογή, ενδέχεται να μην γνωρίζετε ακριβώς ποια είναι η ακριβής τιμή πεδίου για αναζήτηση. Ως εκ τούτου, μπορεί κανείς να χρησιμοποιήσει κανονικές εκφράσεις για να βοηθήσει στην ανάκτηση δεδομένων με βάση τις τιμές αναζήτησης που ταιριάζουν με μοτίβα.

Σε αυτό το σεμινάριο, θα μάθετε -

  • Χρησιμοποιώντας τον τελεστή $ regex για αντιστοίχιση μοτίβου
  • Μοτίβο που ταιριάζει με επιλογές $
  • Αντιστοίχιση μοτίβου χωρίς τον τελεστή regex
  • Λήψη τελευταίων εγγράφων από μια συλλογή

Χρησιμοποιώντας τον τελεστή $ regex για αντιστοίχιση μοτίβου

Ο τελεστής regex στο MongoDB χρησιμοποιείται για την αναζήτηση συγκεκριμένων συμβολοσειρών στη συλλογή. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.

Ας υποθέσουμε ότι έχουμε την ίδια συλλογή υπαλλήλων που έχει τα ονόματα πεδίων "Employeeid" και "EmployeeName". Ας υποθέσουμε επίσης ότι έχουμε τα ακόλουθα έγγραφα στη συλλογή μας.

Ταυτότητα Υπαλλήλου όνομα υπαλλήλου
22 NewMartin
2 Μοχάν
3 Τζο
4 MohanR
100 Γκουρού99
6 Γκούρανγκ

Εδώ στον παρακάτω κώδικα χρησιμοποιήσαμε τον τελεστή regex για να καθορίσουμε τα κριτήρια αναζήτησης.

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Επεξήγηση κώδικα:

  1. Εδώ θέλουμε να βρούμε όλα τα ονόματα υπαλλήλων που έχουν τους χαρακτήρες «Gu». Ως εκ τούτου, καθορίζουμε τον τελεστή $ regex για να καθορίσουμε τα κριτήρια αναζήτησης του "Gu"
  2. Το printjson χρησιμοποιείται για την εκτύπωση κάθε εγγράφου που επιστρέφεται από το ερώτημα με καλύτερο τρόπο.

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

Παραγωγή:

Η έξοδος δείχνει ξεκάθαρα ότι επιστρέφονται εκείνα τα έγγραφα στα οποία το όνομα του υπαλλήλου περιέχει τους χαρακτήρες «Gu».

Αν ας υποθέσουμε ότι η συλλογή σας έχει τα ακόλουθα έγγραφα με ένα πρόσθετο έγγραφο που περιείχε το όνομα εργαζομένου ως "Guru999". Εάν εισαγάγατε τα κριτήρια αναζήτησης ως "Guru99", θα επιστρέψει επίσης το έγγραφο με το "Guru999". Αλλά ας υποθέσουμε αν δεν το θέλαμε αυτό και θέλαμε μόνο να επιστρέψουμε το έγγραφο με το "Guru99". Τότε μπορούμε να το κάνουμε με την ακριβή αντιστοίχιση μοτίβων. Για να κάνουμε μια ακριβή αντιστοίχιση μοτίβου, θα χρησιμοποιήσουμε το χαρακτήρα και $. Θα προσθέσουμε το χαρακτήρα στην αρχή της συμβολοσειράς και το $ στο τέλος της συμβολοσειράς.

Ταυτότητα Υπαλλήλου όνομα υπαλλήλου
22 NewMartin
2 Μοχάν
3 Τζο
4 MohanR
100 Γκουρού99
6 Γκούρανγκ
8 Γκουρού999

Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson) 

Επεξήγηση κώδικα:

  1. Εδώ στα κριτήρια αναζήτησης, χρησιμοποιούμε το χαρακτήρα και $. Το χρησιμοποιείται για να βεβαιωθείτε ότι η συμβολοσειρά ξεκινά με έναν συγκεκριμένο χαρακτήρα και το $ χρησιμοποιείται για να διασφαλίσει ότι η συμβολοσειρά τελειώνει με έναν συγκεκριμένο χαρακτήρα. Έτσι, όταν ο κώδικας εκτελεί, θα πάρει μόνο τη συμβολοσειρά με το όνομα "Guru99"
  2. Το printjson χρησιμοποιείται για την εκτύπωση κάθε εγγράφου που επιστρέφεται από το ερώτημα με καλύτερο τρόπο.

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

Παραγωγή:

Στην έξοδο, είναι σαφώς ορατό ότι η συμβολοσειρά "Guru99" ανακτάται.

Μοτίβο που ταιριάζει με επιλογές $

Κατά τη χρήση του χειριστή regex μπορεί κανείς να παρέχει επιπλέον επιλογές χρησιμοποιώντας τη λέξη-κλειδί επιλογών $ . Για παράδειγμα, ας υποθέσουμε ότι θέλατε να βρείτε όλα τα έγγραφα που είχαν το «Gu» στο Όνομα Εργαζομένου τους, ανεξάρτητα από το αν ήταν ευαίσθητο στην υπόθεση ή ανευαίσθητο. Εάν επιθυμείτε ένα τέτοιο αποτέλεσμα, τότε πρέπει να χρησιμοποιήσουμε τις επιλογές $ με την παράμετρο ευαισθησίας πεζών-κεφαλαίων.

Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.

Ας υποθέσουμε ότι έχουμε την ίδια συλλογή υπαλλήλων που έχει τα ονόματα πεδίων "Employeeid" και "EmployeeName".

Ας υποθέσουμε επίσης ότι έχουμε τα ακόλουθα έγγραφα στη συλλογή μας.

Ταυτότητα Υπαλλήλου όνομα υπαλλήλου
22 NewMartin
2 Μοχάν
3 Τζο
4 MohanR
100 Γκουρού99
6 Γκούρανγκ
7 GURU99

Τώρα, αν εκτελέσουμε το ίδιο ερώτημα με το τελευταίο θέμα, δεν θα βλέπαμε ποτέ το έγγραφο με το "GURU99" στο αποτέλεσμα. Για να διασφαλίσουμε ότι αυτό έρχεται στο σύνολο αποτελεσμάτων, πρέπει να προσθέσουμε την παράμετρο $ I "options".

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson) 

Επεξήγηση κώδικα:

  1. Οι παράμετροι $ με την παράμετρο «I» (που σημαίνει ευαισθησία πεζών) καθορίζει ότι θέλουμε να πραγματοποιήσουμε την αναζήτηση, ανεξάρτητα από το αν βρούμε τα γράμματα «Gu» με πεζά ή κεφαλαία γράμματα.

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

Παραγωγή:

  1. Η έξοδος δείχνει ξεκάθαρα ότι παρόλο που ένα έγγραφο έχει το κεφαλαίο γράμμα «Gu», το έγγραφο εξακολουθεί να εμφανίζεται στο σύνολο αποτελεσμάτων.

Αντιστοίχιση μοτίβου χωρίς τον τελεστή regex

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

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

Επεξήγηση κώδικα:

  1. Οι επιλογές "//" ουσιαστικά σημαίνει τον καθορισμό των κριτηρίων αναζήτησής σας εντός αυτών των οριοθετών. Ως εκ τούτου, καθορίζουμε / Gu / για να βρούμε ξανά εκείνα τα έγγραφα που έχουν «Gu» στο EmployeeName τους.

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

Παραγωγή:

Η έξοδος δείχνει ξεκάθαρα ότι επιστρέφονται εκείνα τα έγγραφα στα οποία το όνομα του υπαλλήλου περιέχει τους χαρακτήρες «Gu».

Λήψη τελευταίων εγγράφων από μια συλλογή

Υπάρχουν διάφοροι τρόποι για να λάβετε τα τελευταία έγγραφα σε μια συλλογή.

Ας δούμε έναν από τους τρόπους μέσω των παρακάτω βημάτων

Το παρακάτω παράδειγμα δείχνει πώς μπορεί να γίνει αυτό.

Ας υποθέσουμε ότι έχουμε την ίδια συλλογή υπαλλήλων που έχει τα ονόματα πεδίων "Employeeid" και "EmployeeName".

Ας υποθέσουμε επίσης ότι έχουμε τα ακόλουθα έγγραφα στη συλλογή μας:

Ταυτότητα Υπαλλήλου όνομα υπαλλήλου
22 NewMartin
2 Μοχάν
3 Τζο
4 MohanR
100 Γκουρού99
6 Γκούρανγκ
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Επεξήγηση κώδικα:

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

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

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

Παραγωγή:

Η έξοδος δείχνει καθαρά ότι εμφανίζονται τα δύο τελευταία έγγραφα της συλλογής. Ως εκ τούτου, έχουμε δείξει ξεκάθαρα ότι για τη λήψη των τελευταίων εγγράφων «n» στη συλλογή, μπορούμε πρώτα να ταξινομήσουμε τα έγγραφα σε φθίνουσα σειρά και, στη συνέχεια, να χρησιμοποιήσουμε τη ρήτρα ορίου για να επιστρέψουμε τον απαιτούμενο αριθμό εγγράφων «n».

Σημείωση : Εάν η αναζήτηση πραγματοποιείται σε μια συμβολοσειρά μεγαλύτερη από 38.000 χαρακτήρες, δεν θα εμφανιστούν τα σωστά αποτελέσματα.

Περίληψη:

  • Η αντιστοίχιση προτύπων μπορεί να επιτευχθεί από τον τελεστή $ regex. Αυτός ο τελεστής μπορεί να χρησιμοποιηθεί για την εύρεση συγκεκριμένων χορδών στη συλλογή.
  • Το σύμβολο και $ μπορεί να χρησιμοποιηθεί για ακριβείς αναζητήσεις κειμένου με το να χρησιμοποιείται για να βεβαιωθείτε ότι η συμβολοσειρά ξεκινά με έναν συγκεκριμένο χαρακτήρα και το $ χρησιμοποιείται για να διασφαλίσει ότι η συμβολοσειρά τελειώνει με έναν συγκεκριμένο χαρακτήρα.
  • Το "i" μαζί με τον τελεστή $ regex μπορεί να χρησιμοποιηθεί για να καθορίσει την ευαισθησία πεζών-κεφαλαίων, έτσι ώστε να μπορούν να αναζητηθούν συμβολοσειρές είτε είναι πεζά ή πεζά.
  • Οι οριοθέτες // μπορούν επίσης να χρησιμοποιηθούν για την αντιστοίχιση μοτίβων.
  • Χρησιμοποιήστε έναν συνδυασμό ταξινόμησης και οριακής συνάρτησης για να επιστρέψετε τα τελευταία ν έγγραφα στη συλλογή. Η συνάρτηση ταξινόμησης μπορεί να χρησιμοποιηθεί για την επιστροφή των εγγράφων σε φθίνουσα σειρά μετά την οποία η ρήτρα ορίου μπορεί να χρησιμοποιηθεί για τον περιορισμό του αριθμού των εγγράφων που επιστρέφονται.

ενδιαφέροντα άρθρα...