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

Πώς να κάνετε αποτελεσματική αναζήτηση στις συλλογές

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

Σε αντίθεση με τις σχεσιακές βάσεις δεδομένων, τα δεδομένα στο Mongo DB αποθηκεύονται σε έγγραφα BSON (δυαδικό JSON) και ομαδοποιούνται σε συλλογές. Για να λειτουργήσει πραγματικά αυτή η προσέγγιση, είναι σημαντικό ναυπάρχουν ισχυροί μηχανισμοί αναζήτησης που μπορούν να ψάξουν στη βάση δεδομένων και να παρουσιάσουν τις πληροφορίες που χρειάζονται οι χρήστες. Με τις αναζητήσεις MongoDB, η βάση δεδομένων μπορεί ακόμη και να αναζητήσει σε συλλογές με πολύπλοκη δομή για να παρέχει τις πληροφορίες που αναζητάτε.

Tip

Η χρήση του shell για το MongoDB είναι πολύ περίπλοκη; Το MongoDB Compass είναι ένα δωρεάν γραφικό περιβάλλον χρήστη που διευκολύνει την πλοήγηση στο MongoDB.

Τι είναι τα ερωτήματα MongoDB;

Οι ερωτήσεις MongoDB είναι ένα φιλικό προς τον χρήστη εργαλείο που χρησιμοποιείται για την αναζήτηση σύνθετων δομών δεδομένων. Ακολουθούν λογικούς κανόνες και λειτουργούν όπως οι επιλογές φίλτρου που βρίσκονται στους περισσότερους ιστότοπους. Αυτό σας επιτρέπει να διατυπώσετε την αναζήτησή σας με τη μεγαλύτερη δυνατή ακρίβεια, ώστε να επιτύχετε τα καλύτερα δυνατά αποτελέσματα. Αυτό είναι ιδιαίτερα σημαντικό, καθώς το MongoDB μπορεί να αποθηκεύσει πολλούς διαφορετικούς τύπους δεδομένων. Χωρίς τις απαραίτητες επιλογές φίλτρου, θα ήταν δύσκολο να διαχειριστείτε τη βάση δεδομένων. Στις επόμενες ενότητες, θα εξηγήσουμε τι χρειάζεστε για να δημιουργήσετε ερωτήματα MongoDB και πώς να τα χρησιμοποιήσετε.

Ποιες είναι οι απαιτήσεις για τις ερωτήσεις MongoDB;

Υπάρχουν μόνο λίγες απαιτήσεις για τη χρήση ερωτημάτων MongoDB.

  1. Πρέπει να έχετε εγκαταστήσει το MongoDB στον υπολογιστή σας. Η βάση δεδομένων λειτουργεί σε πολλά λειτουργικά συστήματα, οπότε οι παρακάτω οδηγίες ισχύουν είτε χρησιμοποιείτε Linux, OS X ή Windows. Τα βήματα που ακολουθούν μετά την εγκατάσταση είναι τα ίδια σε όλα τα συστήματα και επηρεάζουν μόνο την ίδια τη βάση δεδομένων. Μπορείτε να μάθετε πώς λειτουργεί η εγκατάσταση στο σεμινάριο MongoDB.
  2. Χρειάζεστε δικαιώματα διαχειριστή για να χρησιμοποιήσετε τη λειτουργία αναζήτησης.
  3. Είναι καλύτερο να δημιουργήσετε ένα δοκιμαστικό περιβάλλον, ώστε να μπορείτε να δοκιμάσετε τις ερωτήσεις Mongo DB χωρίς κίνδυνο.

Πώς να οργανώσετε μια συλλογή δοκιμών

Ανοίξτε πρώτα το shell και συνδεθείτε ως διαχειριστής. Στη συνέχεια, δημιουργήστε μια νέα συλλογή που θα λειτουργεί ως περιβάλλον δοκιμών για τις πρώτες σας ερωτήσεις MongoDB. Εκτός από την αναζήτηση απλών εγγράφων, η μέθοδος μπορεί επίσης να αναζητήσει πίνακες, διάφορα πεδία και ενσωματωμένα έγγραφα, γι’ αυτό αποφασίσαμε να δημιουργήσουμε μια ελαφρώς πιο σύνθετη συλλογή. Με αυτόν τον τρόπο θα αποκτήσετε καλύτερη εικόνα του εύρους των ερωτήσεων MongoDB.

Το παράδειγμά μας αποτελείται από μια λίστα πελατών. Η μορφή αυτής της λίστας έχει ως εξής:

{
    "name" : "Schulz",
    "units" : 642,
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
}
shell

Το παρόν έγγραφο περιέχει τις ακόλουθες πληροφορίες:

  • όνομα: Το όνομα της εταιρείας που αγόρασε τα προϊόντα.
  • μονάδες: Ο συνολικός αριθμός των προϊόντων που παραγγέλθηκαν από την εταιρεία.
  • τοποθεσία: Η τοποθεσία της εταιρείας. Εάν υπάρχουν πολλά υποκαταστήματα, αυτά μπορούν να αποθηκευτούν με τη μορφή πίνακα.
  • συναλλαγές: Αυτό το πεδίο περιέχει ένα επιπλέον έγγραφο. Έγγραφα όπως αυτό αναφέρονται ως «ενσωματωμένα έγγραφα» ή «ενσωματωμένα έγγραφα». Κάθε ένα από τα έγγραφα συναλλαγών περιέχει πληροφορίες σχετικά με το πόσο καιρό η εταιρεία είναι πελάτης (κάτω από το στοιχείο «πρώτο»), πότε έγινε η τελευταία παραγγελία (κάτω από το στοιχείο «τελευταίο») και τον συνολικό αριθμό των φορών που η εταιρεία έχει παραγγείλει προϊόντα (κάτω από το στοιχείο «σύνολο»).

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

Δημιουργία συλλογής δοκιμών για ερωτήματα MongoDB

Τώρα, θα δημιουργήσουμε μια συλλογή με το όνομα «Πελάτες». Για να είναι εύκολη η επισκόπηση της συλλογής, θα συμπεριλάβουμε μόνο πέντε καταχωρήσεις. Εάν χρησιμοποιείτε ερωτήματα MongoDB για την εργασία σας, μπορείτε να δημιουργήσετε πιο εκτενείς συλλογές χρησιμοποιώντας τη μέθοδο insertMany.

Δείτε πώς μοιάζει η συλλογή δοκιμών μας:

db.customers.insertMany ( [
{
    "name" : "Schulz",
    "location" : [ "Germany", "Austria" ],
    "transactions" : {
        "first" : {
            "year" : 2017,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 14
    }
},
{
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2,
    }
},
{
    "name" : "Meyer",
    "units" : 814,
    "location" : [ "Austria", "Germany" ],
    "transactions" : {
        "first" : {
            "year" : 2016,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 22,
    }
},
{
    "name" : "Pawolski",
    "units" : 313,
    "location" : [ "Germany", "Poland" ],
    "transactions" : {
            "first" : {
            "year" : 2017,
            },
        "last" : {
            "year" : 2020,
        },
        "total" : 9,
    }
},
{
    "name" : "Jorgensen",
    "units" : 7,
    "location" : "Denmark",
    "transactions" : {
        "first" : {
            "year" : 2022,
        },
        "last" : {
            "year" : 2023,
        },
        "total" : 2,
    }
}
] )
shell

Όταν εκτελέσετε αυτήν την καταχώριση με τα δεδομένα που χρησιμοποιήσαμε (ή με τα δικά σας δεδομένα), θα λάβετε μια λίστα με αναγνωριστικά αντικειμένων. Αυτά είναι μοναδικά και διασφαλίζουν ότι κάθε έγγραφο μπορεί επίσης να βρεθεί μέσω ενός αντίστοιχου αναγνωριστικού. Εάν θέλετε να βεβαιωθείτε ότι όλα τα έγγραφα έχουν συμπεριληφθεί στη συλλογή, μπορείτε να χρησιμοποιήσετε το MongoDB find χωρίς παραμέτρους:

db.customers.find ( )
shell

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

Πώς να χρησιμοποιήσετε ερωτήματα MongoDB με πεδία και πίνακες

Μπορείτε να χρησιμοποιήσετε ερωτήματα MongoDB για να αναζητήσετε μεμονωμένα πεδία, πολλαπλά πεδία, πίνακες και ενσωματωμένα έγγραφα. Θα εξετάσουμε το καθένα από αυτά στις παρακάτω ενότητες.

Ερώτηση μεμονωμένων πεδίων με ερωτήματα MongoDB

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

Στο παρακάτω παράδειγμα, θα χρησιμοποιήσουμε επίσης find, αλλά αυτή τη φορά θα δημιουργήσουμε μια ειδική απαίτηση που πρέπει να πληροί ένα έγγραφο για να εμφανιστεί. Συγκεκριμένα, θα αναζητήσουμε όλα τα έγγραφα που έχουν το όνομα «ATS».

db.customers.find (
    { "name" : "ATS" }
)
shell

Απλές ερωτήσεις MongoDB όπως αυτή θα αναζητήσουν τώρα όλα τα έγγραφα στη συλλογή και θα ταιριάξουν αυτά που έχουν την τιμή ονόματος «ATS». Αυτό ισχύει μόνο για μία καταχώριση στη συλλογή μας, οπότε το αποτέλεσμα έχει την εξής μορφή:

db.customers.find ( { "name" : "ATS" } )
{
    "_id" : ObjectID ( "673d14684o75iftbb0ct5003" ),
    "name" : "ATS",
    "units" : 17,
    "location" : "France",
    "transactions" : {
        "first" : {
            "year" : 2021,
        },
        "last" : {
            "year" : 2022,
        },
        "total" : 2
    }
shell

Το αντίστροφο λειτουργεί επίσης. Αν θέλετε να εμφανίσετε όλα τα αποτελέσματα εκτός από την καταχώριση για «ATS», πληκτρολογήστε τα εξής:

db.customers.find (
    { "name" : { $ne : "ATS" } }
)
shell

Αν θέλετε να εξάγετε ερωτήματα MongoDB με διαφορετικές τιμές, μπορείτε να το κάνετε με έναν πίνακα. Θα το κάνουμε αυτό χρησιμοποιώντας τους πελάτες ATS και Jorgensen.

db.customers.find (
    { "name" : [ $in : [ "ATS", "Jorgensen" ] } }
)
shell

Ερώτηση πολλαπλών πεδίων με ερωτήματα MongoDB

Εάν χρειάζεστε ακριβή αποτελέσματα, είναι σημαντικό να κάνετε την αναζήτησή σας πιο συγκεκριμένη. Μπορείτε να κάνετε τις αναζητήσεις σας στο MongoDB πιο ακριβείς χρησιμοποιώντας επιπλέον παραμέτρους. Παρακάτω θα καθορίσουμε μια τιμή από το τμήμα «units» εκτός από το όνομα της εταιρείας «ATS». Με αυτόν τον τρόπο, η αναζήτησή μας θα βρει ένα έγγραφο που περιέχει και τις δύο τιμές:

db.customers.find (
    { "name" : "ATS", "units" : 17 }
)
shell

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

db.customers.find (
    { "name" : "ATS", "units" : 25 }
)
shell

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

db.customers.find (
    { $or : [ {"name" : "ATS"}, { "units" : 25 } ] }
)
shell

Ερώτηση τιμών σε πίνακες

Μπορείτε επίσης να λάβετε υπόψη τις τιμές των πινάκων στις ερωτήσεις MongoDB. Στη συλλογή μας, υπάρχουν εταιρείες που έχουν υποκαταστήματα σε διάφορες χώρες. Αν θέλετε να εμφανίσετε όλες τις εταιρείες που έχουν τουλάχιστον ένα υποκατάστημα στη Γερμανία, μπορείτε να εισαγάγετε τα εξής:

db.customers.find (
    { "location" : "Germany" }
)
shell

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

db.customers.find (
    { "location" : [ "Germany", "Austria" ] }
)
shell

Θα παρατηρήσετε ότι η εισαγωγή εμφανίζει μόνο ένα αποτέλεσμα, παρόλο που θεωρητικά δύο εταιρείες πληρούν τα κριτήρια αναζήτησης. Ο λόγος για αυτό είναι ότι οι ερωτήσεις MongoDB ακολουθούν ακριβώς την εισαγωγή που τους δίνεται, η οποία περιλαμβάνει τη σειρά των στοιχείων. Αν θέλετε η μέθοδος να λαμβάνει υπόψη τις τιμές ανεξάρτητα από τη σειρά με την οποία εμφανίζονται, γράψτε την ερώτηση ως εξής:

db.customers.find (
    { "location" : { $all : [ "Germany", "Austria" ] } }
)
shell

Ερώτηση τιμών σε ενσωματωμένα έγγραφα

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

db.customers.find (
    { "transactions.total" : { $gt : 10 } }
)
shell

Το MongoDB προσπελαύνει το έγγραφο «transactions» και στη συνέχεια αναζητά τον αριθμό των συνολικών συναλλαγών στην ενότητα «total».

Πώς να περιορίσετε την έξοδο των ερωτημάτων MongoDB

Τα αποτελέσματα των ερωτημάτων MongoDB μπορεί να είναι αρκετά εκτεταμένα, γι’ αυτό μπορεί να είναι λογικό να περιορίσετε τα αποτελέσματα σε λίγα μόνο πεδία. Μπορείτε να χρησιμοποιήσετε προβολές για να περιορίσετε τον αριθμό των πεδίων που εμφανίζονται στα αποτελέσματα. Αυτές περιέχουν την τιμή 1 (πεδία που πρέπει να συμπεριληφθούν στα αποτελέσματα) και 0 (πεδία που δεν πρέπει να συμπεριληφθούν στα αποτελέσματα).

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

db.customers.find (
    { }
    { "name" : 1 }
)
shell

Θα εμφανιστούν όλοι οι πελάτες, αλλά η έξοδος θα περιοριστεί στα ονόματα των εταιρειών.

Τι είναι οι δρομείς και πώς μπορώ να τους χρησιμοποιήσω στις ερωτήσεις MongoDB;

Οι δρομείς προσφέρουν έναν τρόπο προσαρμογής της εμφάνισης των αποτελεσμάτων των ερωτημάτων Mongo DB, χωρίς να αλλάζουν τα πραγματικά αποτελέσματα του ερωτήματος. Για παράδειγμα, μπορείτε να περιορίσετε τον αριθμό των αποτελεσμάτων που εμφανίζονται ή να αλλάξετε τη σειρά τους. Εάν θέλετε να εμφανίσετε μόνο δύο από τα αποτελέσματα, μπορείτε να χρησιμοποιήσετε τη μέθοδο περιορισμού. Δείτε πώς:

db.customers.find (
    { }
    { "name" : 1 }
).limit ( 2 )
shell

Για να ταξινομήσετε τα αποτελέσματα, μπορείτε να χρησιμοποιήσετε την ακόλουθη καταχώριση. Έτσι θα εμφανιστούν οι τρεις πελάτες που έχουν παραγγείλει τα λιγότερα προϊόντα:

db.customers.find (
    { }
    { "name" : 1 }
).limit ( 2 ) .sort ( { "units" : 1 } )
shell
Tip

Για να βρείτε ένα συγκεκριμένο έγγραφο στη βάση δεδομένων σας, μπορείτε να χρησιμοποιήσετε τη μέθοδο findONE του MongoDB. Εξηγούμε αυτή τη μέθοδο με περισσότερες λεπτομέρειες σε άλλο άρθρο του Ψηφιακού Οδηγού μας.

9378b1ddb0084eac26edf8b51e922ecb

b713997fc6bfc4f1f8d7a9ec6d65df69

Go to Main Menu