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

¿Actualización y búsqueda de la estructura incrustada de Mongodb?

  1. El error de sintaxis se debe a que tiene que usar comillas alrededor de services.port_info
  2. Sin embargo, $elemMatch en campos anidados actualmente no es compatible de todos modos
  3. Afortunadamente, no necesita $elemMatch para este tipo de consulta

Esto debería hacer:

db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });

$elemMatch es necesario si desea hacer coincidir varios criterios dentro del objeto de matriz, por ejemplo, "buscar todo donde el puerto es 9000 y el protocolo es UDP". Eso no sería compatible con su estructura de datos. No estoy seguro de por qué port_info es una matriz de objetos (¿quizás para situaciones inciertas en las que un puerto podría pertenecer a dos servicios diferentes?) - si fuera un solo objeto, incluso el $elemMatch sería compatible.

Además, tenga en cuenta que dicha consulta siempre devolverá el objeto completo.