- De syntaxisfout is dat je aanhalingstekens moet gebruiken rond
services.port_info
- Echter,
$elemMatch
in geneste velden wordt momenteel niet ondersteund hoe dan ook - Gelukkig heb je
$elemMatch
niet nodig voor dit soort vragen
Dit zou moeten doen:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
is vereist als u aan meerdere criteria binnen het array-object wilt voldoen, bijvoorbeeld "find all where port is 9000 en protocol is UDP". Dat zou niet worden ondersteund door uw gegevensstructuur. Ik weet niet zeker waarom port_info
is een array van objecten (misschien voor onzekere situaties waarin een poort tot twee verschillende services zou kunnen behoren?) - als het een enkel object was, zelfs de $elemMatch
zou worden ondersteund.
Houd er ook rekening mee dat een dergelijke zoekopdracht altijd het hele object retourneert.