- Syntaxfelet beror på att du måste använda citattecken runt
services.port_info
- Men
$elemMatch
i kapslade fält stöds för närvarande inte i alla fall - Lyckligtvis behöver du inte
$elemMatch
för den här typen av fråga
Detta bör göra:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
krävs om du vill matcha flera kriterier inuti arrayobjektet, till exempel "hitta alla där porten är 9000 och protokollet är UDP". Det skulle inte stödjas med din datastruktur. Jag är inte säker på varför port_info
är en array av objekt (kanske för osäkra situationer där en port kan tillhöra två olika tjänster?) - om det vore ett enda objekt, till och med $elemMatch
skulle stödjas.
Tänk också på att en sådan fråga alltid returnerar hela objektet.