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

Mongodb sélectionnez le champ pour renvoyer le document intégré dans le tableau

Oui, mais pas comme vous le souhaitez. Si vous procédez comme suit, vous ne récupérerez que le premier élément du tableau :

coll.find({_id:'2'}, { 'objects.0': 1})

Cependant, ce que vous voulez vraiment, c'est quelque chose qui ressemble à ceci :

coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})

Bien sûr, cela ne fonctionne pas réellement dans MongoDB.

En regardant votre autre question , c'est l'une des raisons d'utiliser "l'objet intégré" au lieu du "tableau d'objets". Avec "objet incorporé", vous pouvez faire ce qui suit :

coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object

Cela vous permet de sélectionner uniquement les "objets intégrés" dont vous avez besoin.

Le problème avec MongoDB est que le document parent est toujours récupéré. Les requêtes renvoient des documents de niveau supérieur. Ceci est intégré à toute l'architecture. Même si vous ne demandez qu'une partie du document, le serveur doit toujours charger le document entier en mémoire avant de vous servir la partie demandée.

Le seul moyen de contourner cela peut être le nouveau Cadre d'agrégation , mais ce n'est pas encore dans la branche stable.