- Chyba syntaxe je způsobena tím, že musíte použít uvozovky kolem
services.port_info
- Nicméně
$elemMatch
ve vnořených polích momentálně není podporován každopádně - Naštěstí nepotřebujete
$elemMatch
pro 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.