- L'erreur de syntaxe est due au fait que vous devez utiliser des guillemets autour de
services.port_info
- Cependant,
$elemMatch
dans les champs imbriqués n'est actuellement pas pris en charge de toute façon - Heureusement, vous n'avez pas besoin de
$elemMatch
pour ce type de requête
Cela devrait faire :
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
est nécessaire si vous souhaitez faire correspondre plusieurs critères à l'intérieur de l'objet tableau, par exemple "trouver tout où le port est 9000 et le protocole est UDP". Cela ne serait pas pris en charge avec votre structure de données. Je ne sais pas pourquoi port_info
est un tableau d'objets (peut-être pour des situations incertaines où un port pourrait appartenir à deux services différents ?) - s'il s'agissait d'un seul objet, même le $elemMatch
serait pris en charge.
N'oubliez pas non plus qu'une telle requête renverra toujours l'objet entier.