sql >> Database >  >> NoSQL >> MongoDB

Alleen de waarde teruggeven in MongoDB?

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


  1. PHP opstarten Kan dynamische bibliotheek php_mongo.dll niet laden

  2. Ik probeer een lijst met collecties van mangoest te krijgen

  3. Redis Pub/Sub ServiceStack, de discussie annuleren

  4. doRedis retourneert fouten in Windows 8 x64 voor verschillende Redis-serverbuild