Wanneer u methoden gebruikt zoals find()
of findOne()
in MongoDB krijg je standaard het hele document terug. En als u projecties gebruikt, kunt u specifieke sleutel/waarde-paren retourneren.
Maar wat als u alleen de waarde wilt?
U kunt de waarde van een veld extraheren door de naam van dat veld toe te voegen aan uw zoekopdracht bij gebruik van findOne()
.
Voorbeeld
Stel dat we een verzameling hebben met de naam products
met de volgende documenten:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
Als we het product van het eerste document willen retourneren, kunnen we het volgende doen:
db.products.findOne().product
Resultaat:
Bat
Merk op dat we de findOne()
. hebben gebruikt methode. Deze techniek werkt niet op de find()
methode. De findOne()
methode retourneert een enkel document, terwijl de find()
methode retourneert alleen een cursor naar het document.
Als we de array wilden retourneren, zouden we dit kunnen doen:
db.products.findOne().sizes
Resultaat:
[ "S", "M", "L" ]
En we kunnen een matrixwaarde krijgen door te verwijzen naar de index:
db.products.findOne().sizes[0]
Resultaat:
S
Arrays zijn gebaseerd op nul, en dus 0
verwijst naar het eerste element in de array, 1
verwijst naar het tweede element, 2
de derde, enzovoort.
Specifiek document
Standaard is de findOne()
methode retourneert het eerste document in de verzameling. We kunnen een ander document selecteren door het doorgeven van een query als eerste argument op te geven.
Ik zeg "eerste argument" omdat findOne()
accepteert ook een projection
argument als een optioneel tweede argument.
db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes
Resultaat:
[ "S", "L", "XL" ]
In dit geval heb ik een projectie-argument toegevoegd, maar dit had geen effect op het resultaat. Maar het zou effect hebben gehad als ik een waarde van 0 had opgegeven. Dat zou ertoe hebben geleid dat er niets werd geretourneerd.
Ingesloten documenten
U kunt puntnotatie gebruiken om waarden uit ingesloten documenten te retourneren
Voorbeelddocument:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20 } }
We kunnen het volgende doen om een waarde uit het ingesloten document te retourneren:
db.pets.findOne().details.type
Resultaat:
Dog