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-sourisNotez que nous avons utilisé le
findOne()
méthode. Cette technique ne fonctionne pas sur lefind()
méthode. LefindOne()
renvoie un seul document, alors que la méthodefind()
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 :
SLes 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 uneprojection
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