MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment renvoyer uniquement la valeur dans MongoDB

Lorsque vous utilisez des méthodes telles que find() ou findOne() dans MongoDB, par défaut, vous obtenez l'intégralité du document renvoyé. Et si vous utilisez des projections, vous pouvez renvoyer des paires clé/valeur spécifiques.

Mais que se passe-t-il si vous ne voulez que la valeur ?

Vous pouvez extraire la valeur d'un champ en ajoutant le nom de ce champ à votre requête lorsque vous utilisez findOne() .

Exemple

Supposons que nous ayons une collection appelée products avec les documents suivants :

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

Si nous voulions retourner le produit du premier document, nous pourrions procéder comme suit :

db.products.findOne().product 

Résultat :

Chauve-souris

Notez que nous avons utilisé le findOne() méthode. Cette technique ne fonctionne pas sur le find() méthode. Le findOne() renvoie un seul document, alors que la méthode find() renvoie simplement un curseur vers le document.

Si nous voulions retourner le tableau, nous pourrions faire ceci :

db.products.findOne().sizes 

Résultat :

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

Et nous pouvons obtenir une valeur de tableau en référençant son index :

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

Résultat :

S

Les tableaux sont basés sur zéro, et donc 0 fait référence au premier élément du tableau, 1 fait référence au deuxième élément, 2 le troisième, et ainsi de suite.

Document spécifique

Par défaut, le findOne() La méthode renvoie le premier document de la collection. Nous pouvons sélectionner un document différent en spécifiant la transmission d'une requête comme premier argument.

Je dis "premier argument" parce que findOne() accepte également une projection argument comme deuxième argument facultatif.

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

Résultat :

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

Dans ce cas, j'ai ajouté un argument de projection, mais cela n'a eu aucun effet sur le résultat. Mais cela aurait eu un effet si j'avais spécifié une valeur de 0. Cela n'aurait donné aucun résultat.

Documents intégrés

Vous pouvez utiliser la notation par points pour renvoyer des valeurs à partir de documents intégrés

Exemple de document :

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

Nous pourrions faire ce qui suit pour renvoyer une valeur à partir du document intégré :

db.pets.findOne().details.type 

Résultat :

Chien