De MongoDB findOne-methode is ideaal voor het door­zoe­ken van een collectie. Deze methode re­tour­neert echter slechts één resultaat, waardoor deze on­ge­schikt is voor veel soorten zoek­op­drach­ten.

Wat is MongoDB findOne?

MongoDB is een da­ta­ba­se­be­heer­sys­teem dat dankzij zijn NoSQL-aanpak en op­mer­ke­lij­ke schaal­baar­heid ge­mak­ke­lijk grote hoe­veel­he­den gegevens kan opslaan en beheren. Hoewel deze aspecten ge­brui­kers aan­zien­lij­ke voordelen bieden, betekent dit ook dat het systeem krachtige methoden nodig heeft om ervoor te zorgen dat ge­brui­kers effectief door de database kunnen navigeren.

Het systeem slaat alle soorten gegevens op in de vorm van een BSON-document (binaire JSON) en bundelt deze do­cu­men­ten in col­lec­ties. Als u een van deze do­cu­men­ten wilt zoeken en weergeven, zijn er ver­schil­len­de opties be­schik­baar. Naast de meer algemene zoek­me­tho­de MongoDB find, is MongoDB findOne een zeer ef­fec­tie­ve methode om grote databases nauw­keu­rig te filteren.

MongoDB findOne doorzoekt alle do­cu­men­ten en col­lec­ties op basis van bepaalde criteria die door de gebruiker zijn opgegeven. Het bij­zon­de­re aan deze methode is dat deze altijd precies één document re­tour­neert. Als er slechts één document in de zoek­op­dracht voorkomt, wordt dit document ge­re­tour­neerd. Als meerdere do­cu­men­ten voldoen aan de door de gebruiker ge­de­fi­ni­eer­de pa­ra­me­ters, re­tour­neert MongoDB findOne het document dat als eerste voorkomt in de na­tuur­lij­ke volgorde van de database. Als er geen do­cu­men­ten kunnen worden gevonden in de zoek­op­dracht, is de uitvoer ‘null’.

Wat is de syntaxis voor MongoDB findOne?

De ba­sis­syn­taxis van MongoDB findOne is eenvoudig. De methode wordt als volgt gebruikt:

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

Onder <query> kunt u aangeven hoe de methode de do­cu­men­ten moet filteren.

Onder <projection> kunt u aangeven welke velden moeten worden weer­ge­ge­ven voor het document dat wordt ge­re­tour­neerd. Gebruik de Boole­aan­se waarden 1 (waar/opnemen) en 0 (onwaar/uit­slui­ten) om aan te geven of een veld moet worden opgenomen. Als deze parameter leeg blijft, worden alle velden weer­ge­ge­ven.

Met de derde zoek­pa­ra­me­ter <options> kunt u de zoek­op­dracht verder aanpassen en ook de weergave wijzigen. Alle drie zoek­pa­ra­me­ters zijn optioneel.

Hoe maak je een collectie aan voor test­doel­ein­den?

Als je MongoDB op Linux, Windows of Mac hebt ge­ïn­stal­leerd en MongoDB findOne wilt gebruiken, is het de moeite waard om een testom­ge­ving op te zetten om met de methode te ex­pe­ri­men­te­ren.

Als u nog geen database hebt ingesteld, lees dan onze uit­ge­brei­de MongoDB-hand­lei­ding om te leren hoe u er een kunt instellen. In ons voorbeeld hieronder gebruiken we een werk­ne­mers­da­ta­ba­se met vijf ver­mel­din­gen. Elke ver­mel­ding bevat in­for­ma­tie over de naam, het geslacht en de leeftijd van werk­ne­mers, evenals hoe lang de persoon al bij het bedrijf werkt. De ver­za­me­ling ziet er als volgt uit:

# 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

Wat zijn ver­schil­len­de manieren om te zoeken met Mongo DB findOne?

Er is meer dan één manier om in­for­ma­tie te zoeken met MongoDB findOne. Je kunt zoeken zonder pa­ra­me­ters, met een ID, met één veld of met meerdere velden.

Zoeken zonder pa­ra­me­ters

Als u de MongoDB findOne-methode zonder pa­ra­me­ters gebruikt, doorzoekt het systeem uw database en neemt het alle ver­mel­din­gen in aan­mer­king. In ons voorbeeld betekent dit dat de methode vijf ver­mel­din­gen iden­ti­fi­ceert. Aangezien geen van de do­cu­men­ten wordt uit­ge­slo­ten en de methode slechts één resultaat re­tour­neert, se­lec­teert MongoDB findOne de eerste persoon die in de database is ingevoerd.

db.employee.findOne ( )
shell

De uitvoer is:

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

Zoeken op ID

Normaal gesproken wilt u bepaalde criteria voor uw zoek­op­dracht opgeven, zodat u uit­ein­de­lijk het document vindt dat u daad­wer­ke­lijk nodig hebt. Een manier om do­cu­men­ten te zoeken met MongoDB findOne is door te zoeken op een ID.

Het veld _id is uniek in elk document. In ons voorbeeld ver­te­gen­woor­digt elke ID precies één werknemer. Als u MongoDB findOne uitvoert met behulp van de object-ID, krijgt u precies het resultaat dat u zoekt.

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

De uitvoer ziet er als volgt uit:

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

Zoeken op basis van spe­ci­fie­ke velden

Als u de ID niet weet of uw collectie op andere pa­ra­me­ters wilt door­zoe­ken, kunt u ook MongoDB findOne gebruiken om naar spe­ci­fie­ke velden te zoeken. Als er slechts één document is dat aan de parameter voldoet, wordt dat document weer­ge­ge­ven. Als er echter meerdere do­cu­men­ten aan uw zoek­cri­te­ria voldoen, geeft het systeem alleen het eerste resultaat weer.

In het on­der­staan­de voorbeeld gaan we zoeken naar alle ver­mel­din­gen met ‘Man’ als geslacht. Hier is het commando:

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

Er zijn twee ver­mel­din­gen die aan deze criteria voldoen, maar er wordt er slechts één weer­ge­ge­ven. De uitvoer toont de werknemer Mr. Brown:

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

Zoeken met behulp van meerdere velden

U hebt ook de mo­ge­lijk­heid om uw zoek­op­dracht verder te verfijnen om over­lap­pin­gen te voorkomen. Dit is misschien niet nodig voor onze kleine ver­za­me­ling voor­beel­den, maar als u met honderden of zelfs duizenden ver­mel­din­gen werkt, is deze optie erg handig. Met MongoDB findOne kunt u ver­schil­len­de velden gebruiken voor de zoek­op­dracht. Als u een werknemer wilt iden­ti­fi­ce­ren op basis van geslacht (man) en leeftijd, kunt u het volgende schrijven:

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

De uitvoer toont opnieuw de heer Brown, die de enige man van 40 jaar in de ver­za­me­ling is. Mevrouw Jones is even oud, maar haar geslacht voldoet niet aan de criteria, dus het resultaat ziet er als volgt uit:

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

Hoe voor­waar­den voor een veld instellen met MongoDB findOne

Het is ook mogelijk om voor­waar­den voor een specifiek veld te de­fi­ni­ë­ren en deze als zoek­cri­te­ria te gebruiken. In het volgende voorbeeld zoeken we alleen naar werk­ne­mers die ouder zijn dan 30 jaar.

Dit item ziet er als volgt uit:

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

Dit sluit de heer Cart­wright uit. Aangezien mevrouw Smith ouder is dan 30 en de eerste persoon in de lijst is, ver­schijnt zij als resultaat:

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

Hoe velden uit­slui­ten met MongoDB findOne

Als u uit­ge­brei­de col­lec­ties hebt die veel in­for­ma­tie bevatten, kan de uitvoer te veel in­for­ma­tie bevatten. Gelukkig biedt MongoDB findOne ook de mo­ge­lijk­heid om velden uit de uitvoer uit te sluiten. In het volgende voorbeeld willen we ID, geslacht en leeftijd niet in de uitvoer weergeven.

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

U krijgt de volgende uitvoer:

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

Wat gebeurt er als MongoDB findOne geen re­sul­ta­ten voor mijn zoek­op­dracht kan vinden?

Als er geen re­sul­ta­ten zijn voor uw zoek­op­dracht met MongoDB findOne, wordt er toch een uitvoer weer­ge­ge­ven. Om te il­lu­stre­ren wat er gebeurt, zoeken we naar mevrouw Larkham, die niet in de collectie voorkomt.

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

De uitvoer hiervoor is:

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

De gratis GUI MongoDB Compass maakt het beheer van uw database een­vou­di­ger. Lees meer over de grafische ge­brui­kers­in­ter­fa­ce in een ander artikel in onze digitale gids.

Ga naar hoofdmenu