MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta MongoDB dentro de uma matriz aninhada


Como você só joga contra um campo, você só precisa expressar o caminho para o seu campo usando notação de ponto:
> db.user.find({"profile.wishlist._id": 2})

Conforme explicado no Documentação do MongoDB , para matrizes (como wishlist ) corresponderá a um documento se qualquer subdocumento na matriz correspondem ao valor do campo.

Observe que, se você precisar corresponder a vários campos, você precisa usar:
  • $elemMatch se todos os campos correspondentes devem pertencer ao mesmo subdocumento;
  • ou vários campos expressos usando a notação de ponto se os vários campos não precisarem corresponder ao mesmo subdocumento.

Por favor, compare a saída dessas duas consultas para entender isso:
> 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