- El error de sintaxis se debe a que tiene que usar comillas alrededor de
services.port_info
- Sin embargo,
$elemMatch
en campos anidados actualmente no es compatible de todos modos - 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.