MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come restituire solo il valore in MongoDB

Quando usi metodi come find() o findOne() in MongoDB, per impostazione predefinita viene restituito l'intero documento. E se usi le proiezioni, puoi restituire coppie chiave/valore specifiche.

Ma cosa succede se vuoi solo il valore?

Puoi estrarre il valore di un campo aggiungendo il nome di quel campo alla tua query quando usi findOne() .

Esempio

Supponiamo di avere una collezione chiamata products con i seguenti documenti:

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

Se volessimo restituire il prodotto del primo documento, potremmo fare quanto segue:

db.products.findOne().product

Risultato:

Bat

Nota che abbiamo usato findOne() metodo. Questa tecnica non funziona su find() metodo. Il findOne() il metodo restituisce un singolo documento, mentre il metodo find() restituisce semplicemente un cursore al documento.

Se volessimo restituire l'array potremmo farlo:

db.products.findOne().sizes

Risultato:

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

E possiamo ottenere un valore di matrice facendo riferimento al suo indice:

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

Risultato:

S

Gli array sono a base zero, quindi 0 fa riferimento al primo elemento dell'array, 1 fa riferimento al secondo elemento, 2 il terzo e così via.

Documento specifico

Per impostazione predefinita, findOne() il metodo restituisce il primo documento della raccolta. Possiamo selezionare un documento diverso specificando il passaggio di una query come primo argomento.

Dico "primo argomento" perché findOne() accetta anche una projection argomento come secondo argomento facoltativo.

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

Risultato:

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

In questo caso ho aggiunto un argomento di proiezione, ma non ha avuto alcun effetto sul risultato. Ma avrebbe avuto effetto se avessi specificato un valore pari a 0. Ciò non avrebbe comportato la restituzione di nulla.

Documenti incorporati

Puoi utilizzare la notazione a punti per restituire valori dai documenti incorporati

Esempio di documento:

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

È possibile eseguire le seguenti operazioni per restituire un valore dal documento incorporato:

db.pets.findOne().details.type

Risultato:

Dog