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

Τι είναι το MongoDB findOne;

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

Το σύστημα αποθηκεύει δεδομένα όλων των τύπων με τη μορφή εγγράφου BSON (binary JSON) και ομαδοποιεί αυτά τα έγγραφα σε συλλογές. Εάν θέλετε να αναζητήσετε και να εξάγετε ένα από αυτά τα έγγραφα, έχετε στη διάθεσή σας διάφορες επιλογές. Εκτός από τη γενικότερη μέθοδο αναζήτησης MongoDB find, η MongoDB findOne είναι μια εξαιρετικά αποτελεσματική μέθοδος για το φιλτράρισμα μεγάλων βάσεων δεδομένων με ακρίβεια.

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

Ποια είναι η σύνταξη για το MongoDB findOne;

Η βασική σύνταξη του MongoDB findOne είναι απλή. Η μέθοδος χρησιμοποιείται ως εξής:

db.collection.findOne ( <query>, <projection>, <options> )
shell

Κάτω από <query>, μπορείτε να καθορίσετε τον τρόπο με τον οποίο η μέθοδος θα φιλτράρει τα έγγραφα.

Στο πεδίο <projection>, μπορείτε να καθορίσετε ποια πεδία θα εμφανίζονται για το έγγραφο που επιστρέφεται. Χρησιμοποιήστε τις τιμές Boolean 1 (true/include) και 0 (false/exclude) για να υποδείξετε αν ένα πεδίο πρέπει να συμπεριληφθεί. Εάν αυτή η παράμετρος παραμείνει κενή, θα εμφανιστούν όλα τα πεδία.

Η τρίτη παράμετρος αναζήτησης <options> σας επιτρέπει να τροποποιήσετε περαιτέρω την αναζήτηση και να αλλάξετε την εμφάνιση. Και οι τρεις παράμετροι αναζήτησης είναι προαιρετικές.

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

Εάν έχετε εγκαταστήσει το MongoDB σε Linux, Windows ή Mac και θέλετε να χρησιμοποιήσετε το MongoDB findOne, αξίζει να δημιουργήσετε ένα δοκιμαστικό περιβάλλον για να πειραματιστείτε με τη μέθοδο.

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

# Create Collection
db.employee.insertMany ( [
    {
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
    },
    {
    name : "Jones",
    gender : "Female",
    age : 40,
    year : 2017,
    },
    {
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
    },
    {
    name : "Michaels",
    gender : "Female",
    age : 44,
    year : 2015
    },
    name : "Cartwright",
    gender : "Male",
    age : 22,
    year : 2022
    }
]
)
shell

Ποιοι είναι οι διαφορετικοί τρόποι αναζήτησης με το Mongo DB findOne;

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

Αναζήτηση χωρίς παραμέτρους

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

db.employee.findOne ( )
shell

Το αποτέλεσμα είναι:

db.employee.findOne ( )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

Αναζήτηση με βάση τον αριθμό ταυτότητας

Κανονικά, θέλετε να ορίσετε κάποια κριτήρια για την αναζήτησή σας, ώστε να βρείτε το έγγραφο που πραγματικά χρειάζεστε. Ένας τρόπος για να αναζητήσετε έγγραφα με το MongoDB findOne είναι να αναζητήσετε ένα αναγνωριστικό (ID).

Το πεδίο _id είναι μοναδικό σε κάθε έγγραφο. Στο παράδειγμά μας, κάθε ID αντιπροσωπεύει ακριβώς έναν υπάλληλο. Εάν εκτελέσετε το MongoDB findOne χρησιμοποιώντας το ID αντικειμένου, θα λάβετε το ακριβές αποτέλεσμα που αναζητάτε.

db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
shell

Το αποτέλεσμα έχει την εξής μορφή:

db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
    _id : ObjectID ( "582pfh773813tw982qj411l0"
    name : "Cartwright",
    gender : "Male",
    age : 22,
    year : 2022
}
shell

Αναζήτηση με χρήση συγκεκριμένων πεδίων

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

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

db.employee.findOne ( { gender : "Male" } )
shell

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

db.employee.findOne ( { gender : "Male" } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

Αναζήτηση χρησιμοποιώντας διάφορα πεδία

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

db.employee.findOne ( { gender : "Male", age: 40 } )
shell

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

db.employee.findOne ( { gender : "Male", age: 40 } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Brown",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

Πώς να ορίσετε συνθήκες για ένα πεδίο χρησιμοποιώντας το MongoDB findOne

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

Αυτή η καταχώριση έχει την εξής μορφή:

db.employee.findOne ( { age : { $gt : 30 } } )
shell

Αυτό αποκλείει τον κ. Cartwright. Δεδομένου ότι η κα Smith είναι άνω των 30 ετών και είναι η πρώτη στην λίστα, εμφανίζεται ως αποτέλεσμα:

db.employee.findOne ( { age : { $gt : 30 } } )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Smith",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

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

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

db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
shell

Θα λάβετε την ακόλουθη έξοδο:

db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
    name : "Smith",
    year : 2002
}
shell

Τι συμβαίνει αν το MongoDB findOne δεν μπορεί να βρει αποτελέσματα για την αναζήτησή μου;

Εάν δεν υπάρχουν αποτελέσματα για την αναζήτησή σας με το MongoDB findOne, θα εξακολουθεί να εμφανίζεται ένα αποτέλεσμα. Για να δείξουμε τι συμβαίνει, θα αναζητήσουμε την κα Larkham, η οποία δεν βρίσκεται στη συλλογή.

db.employee.findOne ( { name : "Larkham" }  )
shell

Το αποτέλεσμα για αυτό είναι:

db.employee.findOne ( { name : "Larkham" }  )
null
shell
Tip

Το δωρεάν GUI MongoDB Compass διευκολύνει τη διαχείριση της βάσης δεδομένων σας. Διαβάστε για το γραφικό περιβάλλον χρήστη σε άλλο άρθρο του Ψηφιακού Οδηγού μας.

c601ef95ac62761b8e3583955193ed29

Go to Main Menu