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 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:
db.collection.findOne ( <query>, <projection>, <options> )shellUnder <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.
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:
# 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
}
]
)shellHvilke 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.
db.employee.findOne ( )shellOutputtet er:
db.employee.findOne ( )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellSø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.
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )shellResultatet ser således ud:
db.employee.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
_id : ObjectID ( "582pfh773813tw982qj411l0"
name : "Cartwright",
gender : "Male",
age : 22,
year : 2022
}shellSø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:
db.employee.findOne ( { gender : "Male" } )shellDer er to poster, der matcher disse kriterier, men kun én vises. Outputtet viser medarbejderen Mr. Brown:
db.employee.findOne ( { gender : "Male" } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellSø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:
db.employee.findOne ( { gender : "Male", age: 40 } )shellResultatet 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:
db.employee.findOne ( { gender : "Male", age: 40 } )
{
_id : ObjectID ( "498p0t173mv489fh63th00kh"
name : "Brown",
gender : "Male",
age : 40,
year : 2019
}shellSå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:
db.employee.findOne ( { age : { $gt : 30 } } )shellDette udelukker hr. Cartwright. Da fru Smith er over 30 år og er den første person på listen, vises hun som resultatet:
db.employee.findOne ( { age : { $gt : 30 } } )
{
_id : ObjectID ( "529ete7300of4002bme148om" ),
name : "Smith",
gender : "Female",
age : 56,
year : 2002
}shellSå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.
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )shellDu får følgende output:
db.employee.findOne ( { name : "Smith" }, { _id : 0, gender : 0, age : 0 } )
{
name : "Smith",
year : 2002
}shellHvad 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.
db.employee.findOne ( { name : "Larkham" } )shellResultatet for dette er:
db.employee.findOne ( { name : "Larkham" } )
nullshellDen gratis GUI 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.