De MongoDB findOne-methode is ideaal voor het doorzoeken van een collectie. Deze methode retourneert echter slechts één resultaat, waardoor deze ongeschikt is voor veel soorten zoekopdrachten.

Wat is MongoDB findOne?

MongoDB is een databasebeheersysteem dat dankzij zijn NoSQL-aanpak en opmerkelijke schaalbaarheid gemakkelijk grote hoeveelheden gegevens kan opslaan en beheren. Hoewel deze aspecten gebruikers aanzienlijke voordelen bieden, betekent dit ook dat het systeem krachtige methoden nodig heeft om ervoor te zorgen dat gebruikers 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 documenten in collecties. Als u een van deze documenten wilt zoeken en weergeven, zijn er verschillende opties beschikbaar. Naast de meer algemene zoekmethode MongoDB find, is MongoDB findOne een zeer effectieve methode om grote databases nauwkeurig te filteren.

MongoDB findOne doorzoekt alle documenten en collecties op basis van bepaalde criteria die door de gebruiker zijn opgegeven. Het bijzondere aan deze methode is dat deze altijd precies één document retourneert. Als er slechts één document in de zoekopdracht voorkomt, wordt dit document geretourneerd. Als meerdere documenten voldoen aan de door de gebruiker gedefinieerde parameters, retourneert MongoDB findOne het document dat als eerste voorkomt in de natuurlijke volgorde van de database. Als er geen documenten kunnen worden gevonden in de zoekopdracht, is de uitvoer ‘null’.

Wat is de syntaxis voor MongoDB findOne?

De basissyntaxis 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 documenten moet filteren.

Onder <projection> kunt u aangeven welke velden moeten worden weergegeven voor het document dat wordt geretourneerd. Gebruik de Booleaanse waarden 1 (waar/opnemen) en 0 (onwaar/uitsluiten) om aan te geven of een veld moet worden opgenomen. Als deze parameter leeg blijft, worden alle velden weergegeven.

Met de derde zoekparameter <options> kunt u de zoekopdracht verder aanpassen en ook de weergave wijzigen. Alle drie zoekparameters zijn optioneel.

Hoe maak je een collectie aan voor testdoeleinden?

Als je MongoDB op Linux, Windows of Mac hebt geïnstalleerd en MongoDB findOne wilt gebruiken, is het de moeite waard om een testomgeving op te zetten om met de methode te experimenteren.

Als u nog geen database hebt ingesteld, lees dan onze uitgebreide MongoDB-handleiding om te leren hoe u er een kunt instellen. In ons voorbeeld hieronder gebruiken we een werknemersdatabase met vijf vermeldingen. Elke vermelding bevat informatie over de naam, het geslacht en de leeftijd van werknemers, evenals hoe lang de persoon al bij het bedrijf werkt. De verzameling 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 verschillende manieren om te zoeken met Mongo DB findOne?

Er is meer dan één manier om informatie te zoeken met MongoDB findOne. Je kunt zoeken zonder parameters, met een ID, met één veld of met meerdere velden.

Zoeken zonder parameters

Als u de MongoDB findOne-methode zonder parameters gebruikt, doorzoekt het systeem uw database en neemt het alle vermeldingen in aanmerking. In ons voorbeeld betekent dit dat de methode vijf vermeldingen identificeert. Aangezien geen van de documenten wordt uitgesloten en de methode slechts één resultaat retourneert, selecteert 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 zoekopdracht opgeven, zodat u uiteindelijk het document vindt dat u daadwerkelijk nodig hebt. Een manier om documenten te zoeken met MongoDB findOne is door te zoeken op een ID.

Het veld _id is uniek in elk document. In ons voorbeeld vertegenwoordigt 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 specifieke velden

Als u de ID niet weet of uw collectie op andere parameters wilt doorzoeken, kunt u ook MongoDB findOne gebruiken om naar specifieke velden te zoeken. Als er slechts één document is dat aan de parameter voldoet, wordt dat document weergegeven. Als er echter meerdere documenten aan uw zoekcriteria voldoen, geeft het systeem alleen het eerste resultaat weer.

In het onderstaande voorbeeld gaan we zoeken naar alle vermeldingen met ‘Man’ als geslacht. Hier is het commando:

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

Er zijn twee vermeldingen die aan deze criteria voldoen, maar er wordt er slechts één weergegeven. 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 mogelijkheid om uw zoekopdracht verder te verfijnen om overlappingen te voorkomen. Dit is misschien niet nodig voor onze kleine verzameling voorbeelden, maar als u met honderden of zelfs duizenden vermeldingen werkt, is deze optie erg handig. Met MongoDB findOne kunt u verschillende velden gebruiken voor de zoekopdracht. Als u een werknemer wilt identificeren 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 verzameling 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 voorwaarden voor een veld instellen met MongoDB findOne

Het is ook mogelijk om voorwaarden voor een specifiek veld te definiëren en deze als zoekcriteria te gebruiken. In het volgende voorbeeld zoeken we alleen naar werknemers die ouder zijn dan 30 jaar.

Dit item ziet er als volgt uit:

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

Dit sluit de heer Cartwright uit. Aangezien mevrouw Smith ouder is dan 30 en de eerste persoon in de lijst is, verschijnt zij als resultaat:

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

Hoe velden uitsluiten met MongoDB findOne

Als u uitgebreide collecties hebt die veel informatie bevatten, kan de uitvoer te veel informatie bevatten. Gelukkig biedt MongoDB findOne ook de mogelijkheid 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 resultaten voor mijn zoekopdracht kan vinden?

Als er geen resultaten zijn voor uw zoekopdracht met MongoDB findOne, wordt er toch een uitvoer weergegeven. Om te illustreren 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 eenvoudiger. Lees meer over de grafische gebruikersinterface in een ander artikel in onze digitale gids.

Ga naar hoofdmenu