Obtenir partie spécifique du document
Je suis en train de Mongo db et je me demande si il est possible de n'obtenir qu'une partie spécifique d'un document?
Par exemple, j'ai:
{
"name" : "MongoDB",
"info" : { x : 203, y : 102 }
}
et je veux seulement le contenu de info
.
Le plus proche que j'ai trouvé est db.collection.find({}, { info: 1 })
mais cela me renvoie { "info" : { x : 203, y : 102 } }
lorsque j'ai seulement besoin de { x : 203, y : 102 }
.
- Je suis également intéressé par la solution que mes documents sont +de 5 mo en taille et que je cherche uniquement des champs spécifiques. Non, je ne peux pas enregistrer les champs dans une table séparée comme je stocker plusieurs champs dans un document (+10k champs)
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire
mais cela signifie que d'énumérer chaque et chaque élément de l'objet info dans la projection - qui peut ou peut ne pas être ce que vous cherchez.
Vous pouvez utiliser
distinct()
fonction qui ressemble par ce qui suit:Non, vous ne pouvez pas retourner uniquement les valeurs de x/y; même si vous limitez les champs de la structure extérieure est toujours retourné.
Voir Résultat Des Projections pour plus d'info.
MongoDb docs
lire ce
dans ce,Si vous spécifiez pas de projection, la méthode find() retourne tous les champs de tous les documents qui correspondent à la requête.
Vous pouvez utiliser l'agrégation cadre:
$de la phase du projet pour sélectionner les champs
db.getCollection('yourCollection').aggregate([
{$match:{_id:ObjectId("566fc97f5b79dff1a73ca2ae")}},
{$project:{_id:0, "x":"$info.x", "y":"$info.y"}}
])
De départ
Mongo 4.2
, le$remplaceavec
opérateur d'agrégation peut être utilisé pour remplacer un document par un autre (dans notre cas par un sous-document):Avant
Mongo 4.2
et de départMongo 3.4
,$replaceRoot
peut être utilisé à la place de$replaceWith
: