# Τι είναι το MongoDB findOne και πώς χρησιμοποιείται

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

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

[Το MongoDB](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/mongodb-eisagogi-kai-sygkrisi-me-to-mysql/) είναι ένα σύστημα διαχείρισης βάσεων δεδομένων που μπορεί εύκολα να αποθηκεύει και να διαχειρίζεται μεγάλους όγκους δεδομένων χάρη στην προσέγγιση NoSQL και την αξιοσημείωτη επεκτασιμότητά του. Αν και αυτά τα χαρακτηριστικά προσφέρουν σημαντικά πλεονεκτήματα στους χρήστες, σημαίνουν επίσης ότι το σύστημα χρειάζεται ισχυρές μεθόδους για να διασφαλίσει ότι οι χρήστες μπορούν να πλοηγηθούν αποτελεσματικά στη βάση δεδομένων.

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

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

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

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

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

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

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

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

Note Για την αποτελεσματική αναζήτηση συλλογών με πολλαπλούς παραμέτρους αναζήτησης, υπάρχουν [οι ερωτήσεις MongoDB](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/erotimata-mongodb/). Οι ερωτήσεις βασίζονται στη μέθοδο εύρεσης MongoDB. Μπορείτε να μάθετε περισσότερα για τις ερωτήσεις MongoDB στον Ψηφιακό Οδηγό μας.

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

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

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

```shell
# 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
    }
]
)
```

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

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

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

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

```shell
db.employee.findOne ( )
```

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```shell
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
}
```

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

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

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

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

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

Tip Το δωρεάν GUI [MongoDB Compass](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/mongodb-compass/) διευκολύνει τη διαχείριση της βάσης δεδομένων σας. Διαβάστε για το γραφικό περιβάλλον χρήστη σε άλλο άρθρο του Ψηφιακού Οδηγού μας.


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/mongodb-findone/](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/mongodb-findone/) for AI/LLM consumption.