- Chyba syntaxe je způsobena tím, že musíte použít uvozovky kolem
services.port_info - Nicméně
$elemMatchve vnořených polích momentálně není podporován každopádně - Naštěstí nepotřebujete
$elemMatchpro tento druh dotazu
To by mělo fungovat:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch je vyžadováno, pokud chcete v objektu pole porovnat více kritérií, například "najít vše, kde port je 9000 a protokol je UDP". To by nebylo podporováno vaší datovou strukturou. Nejsem si jistý, proč port_info je pole objektů (možná pro nejisté situace, kdy by port mohl patřit dvěma různým službám?) - pokud by to byl jeden objekt, dokonce i $elemMatch bude podporováno.
Mějte také na paměti, že takový dotaz vždy vrátí celý objekt.