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

Requête MongoDB dans un tableau imbriqué

Comme vous ne faites qu'un match contre un champ, vous n'avez qu'à exprimer le chemin vers votre champ en utilisant la notation pointée :

> db.user.find({"profile.wishlist._id": 2})

Comme expliqué dans le Documentation MongoDB , pour les tableaux (comme wishlist ) cela correspondra à un document s'il y en a un sous-document dans le tableau correspond à la valeur du champ.

Veuillez noter que si vous devez faire correspondre plusieurs champs, vous devez utiliser soit :

  • $elemMatch si tous les champs correspondants doivent appartenir au même sous-document ;
  • ou plusieurs champs exprimés à l'aide de la notation par points si les différents champs n'ont pas besoin de correspondre au même sous-document.

Veuillez comparer le résultat de ces deux requêtes pour mieux comprendre :

> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
//                                      ^                            ^^
//                              will return your document even if the was no 
//                              subdocument having both _id=2 and name=a1
> db.user.find({"profile.wishlist": {$elemMatch: { _id: 2, name: "a1"}}})
//                                                      ^         ^^
//                                         no result as there was no subdocument
//                                         matching  _both_ _id=2 and name=a1