- Syntaksfejlen skyldes, at du skal bruge anførselstegn omkring
services.port_info
- Men
$elemMatch
i indlejrede felter understøttes i øjeblikket ikke alligevel - Heldigvis behøver du ikke
$elemMatch
for denne form for forespørgsel
Dette burde gøre:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
er påkrævet, hvis du ønsker at matche flere kriterier inde i array-objektet, for eksempel "find alle, hvor porten er 9000 og protokollen er UDP". Det ville ikke være understøttet med din datastruktur. Jeg er ikke sikker på hvorfor port_info
er en række objekter (måske til usikre situationer, hvor en port kunne tilhøre to forskellige tjenester?) - hvis det var et enkelt objekt, endda $elemMatch
ville blive understøttet.
Husk også, at en sådan forespørgsel altid vil returnere hele objektet.