MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Query MongoDB all'interno di un array nidificato

Quando affronti solo uno campo, devi solo esprimere il percorso del tuo campo usando la notazione punto:

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

Come spiegato in Documentazione MongoDB , per gli array (come wishlist ) questo corrisponderà a un documento se qualsiasi documento secondario nell'array corrisponde al valore del campo.

Tieni presente che se devi confrontarti con diversi campi, devi utilizzare uno dei seguenti:

  • $elemMatch se tutti i campi corrispondenti devono appartenere allo uguale documento secondario;
  • o più campi espressi utilizzando la notazione punto se non è necessario che i vari campi corrispondano allo stesso documento secondario.

Si prega di confrontare l'output di queste due query per avere un'idea di questo:

> 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