# Hvad er MongoDB findOne, og hvordan bruges det?

MongoDB-metoden findOne er fantastisk til at søge i en samling. Den returnerer dog kun et enkelt resultat, hvilket gør den uegnet til mange typer søgninger.

## Hvad er MongoDB findOne?

[MongoDB](https://www.ionos.com/da-dk/digitalguide/websteder/webudvikling/mongodb-en-introduktion-og-sammenligning-med-mysql/) er et databasestyringssystem, der nemt kan gemme og administrere store mængder data takket være sin NoSQL-tilgang og bemærkelsesværdige skalerbarhed. Selvom disse aspekter giver brugerne betydelige fordele, betyder det også, at systemet har brug for stærke metoder for at sikre, at brugerne effektivt kan navigere i databasen.

Systemet gemmer alle typer data i form af et BSON-dokument (binært JSON) og samler disse dokumenter i samlinger. Hvis du vil søge efter og udskrive et af disse dokumenter, har du flere muligheder. Ud over den mere generelle søgemetode MongoDB find er MongoDB findOne en *meget effektiv metode* til at filtrere store databaser med stor præcision.

MongoDB findOne søger i alle dokumenter og samlinger efter bestemte kriterier, der er angivet af brugeren. Det særlige ved denne metode er, at den **altid returnerer nøjagtigt ét dokument**. Hvis der kun er ét dokument i søgeforespørgslen, returneres dette dokument. Hvis flere dokumenter matcher de parametre, der er defineret af brugeren, returnerer MongoDB findOne det dokument, der vises først i den naturlige rækkefølge i databasen. Hvis der ikke kan findes nogen dokumenter i søgningen, er outputtet ‘null’.

## Hvad er syntaksen for MongoDB findOne?

Den grundlæggende syntaks for MongoDB findOne er ligetil. Metoden bruges på følgende måde:

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

Under `<query>` kan du angive, hvordan metoden skal filtrere dokumenterne.

Under `<projection>` kan du angive, hvilke felter der skal vises for det dokument, der returneres. Brug de boolske værdier 1 (sand/inkluder) og 0 (falsk/ekskluder) til at angive, om et felt skal inkluderes. Hvis denne parameter forbliver tom, vises alle felter.

Den tredje søgeparameter `<options>` giver dig mulighed for at ændre søgningen yderligere og også ændre visningen. Alle tre søgeparametre er valgfri.

Note For at søge effektivt i samlinger med flere søgeparametre findes der [MongoDB-forespørgsler](https://www.ionos.com/da-dk/digitalguide/websteder/webudvikling/mongodb-queries/). Forespørgsler er baseret på MongoDB-find-metoden. Du kan læse mere om MongoDB-forespørgsler i vores digitale guide.

## Sådan oprettes en samling til testformål

Hvis du har installeret MongoDB på Linux, Windows eller Mac og ønsker at bruge MongoDB findOne, er det en god idé at oprette et testmiljø, hvor du kan afprøve metoden.

Hvis du endnu ikke har oprettet en database, kan du læse vores omfattende MongoDB-vejledning for at lære, hvordan du opretter en. I vores eksempel nedenfor bruger vi en medarbejderdatabase med fem poster. Hver post indeholder oplysninger om medarbejdernes navn, køn og alder samt hvor længe personen har været ansat i virksomheden. Samlingen ser således ud:

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

## Hvilke forskellige måder er der at søge med Mongo DB findOne?

Der er mere end én måde at søge efter oplysninger ved hjælp af MongoDB findOne. Du kan søge uden parametre, med et ID, med et felt eller med flere felter.

### Søgning uden parametre

Hvis du bruger MongoDB findOne-metoden **uden parametre**, vil systemet søge i din database og tage alle poster i betragtning. I vores eksempel betyder det, at metoden vil identificere fem poster. Da ingen af dokumenterne er ekskluderet, og metoden kun returnerer ét resultat, vil MongoDB findOne vælge den første person, der blev indtastet i databasen.

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

Outputtet er:

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

### Søgning efter ID

Normalt vil du angive nogle kriterier for din søgning, så du ender med det dokument, du faktisk har brug for. En måde, du kan søge efter dokumenter med MongoDB findOne, er ved at søge efter et ID.

Feltet `_id` er **unikt i hvert dokument**. I vores eksempel repræsenterer hvert ID nøjagtigt én medarbejder. Hvis du kører MongoDB findOne ved hjælp af objekt-ID’et, får du det nøjagtige resultat, du leder efter.

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

Resultatet ser således ud:

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

### Søgning ved hjælp af specifikke felter

Hvis du ikke kender ID’et eller ønsker at søge i din samling efter andre parametre, kan du også bruge MongoDB findOne til **at søge efter bestemte felter**. Hvis der kun er ét dokument, der matcher parameteren, er det det dokument, der vises. Hvis flere dokumenter matcher dine søgekriterier, viser systemet dog kun den første post.

I eksemplet nedenfor søger vi efter alle poster, hvor kønnet er angivet som ‘Mand’. Her er kommandoen:

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

Der er to poster, der matcher disse kriterier, men kun én vises. Outputtet viser medarbejderen Mr. Brown:

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

### Søgning ved hjælp af flere felter

Du har også mulighed for at indsnævre din søgning yderligere for at undgå overlapninger. Dette er måske ikke nødvendigt for vores lille prøvesamling, men hvis du arbejder med flere hundrede eller endda tusinder af poster, er denne mulighed meget praktisk. MongoDB findOne giver dig mulighed for at bruge **flere felter til søgningen**. Hvis du vil identificere en medarbejder efter køn (mand) og alder, kan du skrive følgende:

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

Resultatet viser igen hr. Brown, som er den eneste person i samlingen, der er mand og 40 år gammel. Fru Jones er samme alder, men hendes køn matcher ikke kriterierne, så resultatet ser således ud:

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

## Sådan indstilles betingelser for et felt ved hjælp af MongoDB findOne

Det er også muligt at definere betingelser for et bestemt felt og bruge disse som søgekriterier. I det følgende eksempel søger vi kun efter medarbejdere, der er over 30 år.

Denne post ser således ud:

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

Dette udelukker hr. Cartwright. Da fru Smith er over 30 år og er den første person på listen, vises hun som resultatet:

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

## Sådan udelukkes felter med MongoDB findOne

Hvis du har omfattende samlinger, der indeholder mange oplysninger, kan outputtet indeholde for mange oplysninger. Heldigvis tilbyder MongoDB findOne også muligheden for **at udelade felter fra outputtet**. I det følgende eksempel ønsker vi ikke at vise ID, køn og alder i outputtet.

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

Du får følgende output:

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

## Hvad sker der, hvis MongoDB findOne ikke kan finde nogen resultater for min søgning?

Hvis der ikke er nogen resultater for din søgning med MongoDB findOne, vises der stadig et output. For at illustrere, hvad der sker, søger vi efter Ms. Larkham, som ikke er i samlingen.

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

Resultatet for dette er:

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

Tip Den gratis GUI [MongoDB Compass](https://www.ionos.com/da-dk/digitalguide/websteder/webudvikling/mongodb-compass/) gør det nemmere at administrere din database. Læs mere om den grafiske brugergrænseflade i en anden artikel i vores digitale guide.


This is a markdown version of: [https://www.ionos.com/da-dk/digitalguide/websteder/webudvikling/mongodb-findone/](https://www.ionos.com/da-dk/digitalguide/websteder/webudvikling/mongodb-findone/) for AI/LLM consumption.