sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta MongoDB dentro de una matriz anidada

Como solo te enfrentas a uno campo, solo tiene que expresar la ruta a su campo usando la notación de puntos:

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

Como se explica en Documentación de MongoDB , para arreglos (como wishlist ) esto coincidirá con un documento si cualquiera el subdocumento en la matriz coincide con el valor del campo.

Tenga en cuenta que si necesita hacer coincidir contra varios campos, debe usar:

  • $elemMatch si todos los campos coincidentes deben pertenecer al mismo subdocumento;
  • o múltiples campos expresados ​​usando la notación de puntos si los diversos campos no necesitan coincidir con el mismo subdocumento.

Compare el resultado de esas dos consultas para comprender esto:

> 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