sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man returnerar bara värdet i MongoDB

När du använder metoder som find() eller findOne() i MongoDB får du som standard hela dokumentet tillbaka. Och om du använder projektioner kan du returnera specifika nyckel-/värdepar.

Men vad händer om du bara vill ha värdet?

Du kan extrahera värdet på ett fält genom att lägga till det fältets namn till din fråga när du använder findOne() .

Exempel

Anta att vi har en samling som heter products med följande dokument:

{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Hatt" , "sizes" :[ "S", "L", "XL" ] }{ "_id" :3, "product" :"Cap", "sizes" :[ "M", "L" ] } 

Om vi ​​ville returnera det första dokumentets produkt kan vi göra följande:

db.products.findOne().product 

Resultat:

Bat

Observera att vi använde findOne() metod. Den här tekniken fungerar inte på find() metod. findOne() metod returnerar ett enda dokument, medan find() metoden returnerar bara en markör till dokumentet.

Om vi ​​ville returnera arrayen kunde vi göra detta:

db.products.findOne().sizes 

Resultat:

[ "S", "M", "L" ]

Och vi kan få ett matrisvärde genom att referera till dess index:

db.products.findOne().sizes[0] 

Resultat:

S

Arrayer är nollbaserade, och så 0 refererar till det första elementet i arrayen, 1 refererar till det andra elementet, 2 den tredje och så vidare.

Specifikt dokument

Som standard är findOne() metod returnerar det första dokumentet i samlingen. Vi kan välja ett annat dokument genom att ange att skicka en fråga som första argument.

Jag säger "första argumentet" eftersom findOne() accepterar även en projection argument som ett valfritt andra argument.

db.products.findOne({_id: 2}, {sizes: 1, _id: 0}).sizes 

Resultat:

[ "S", "L", "XL" ] 

I det här fallet lade jag till ett projektionsargument, men det hade ingen effekt på resultatet. Men det skulle ha haft en effekt om jag hade angett ett värde på 0. Det skulle ha resulterat i att ingenting returnerades.

Inbäddade dokument

Du kan använda punktnotation för att returnera värden från inbäddade dokument

Exempeldokument:

{ "_id" :1, "name" :"Wag", "details" :{ "type" :"Hund", "weight" :20 }}

Vi kan göra följande för att returnera ett värde från det inbäddade dokumentet:

db.pets.findOne().details.type 

Resultat:

Hund


  1. Vad är skillnaden mellan id och _id i mongoose?

  2. Det går inte att ladda partialer på servern JS

  3. DB med bästa inserts/sek prestanda?

  4. Hur använder jag Node.js-kluster med min enkla Express-app?