- L'errore di sintassi è dovuto al fatto che devi usare le virgolette attorno a
services.port_info
- Tuttavia,
$elemMatch
in campi nidificati non è attualmente supportato comunque - Fortunatamente, non hai bisogno di
$elemMatch
per questo tipo di query
Questo dovrebbe fare:
db.hosts.find({ ip : "127.0.0.1"}, { "services.port_info.product" : "ssh" });
$elemMatch
è richiesto se si desidera abbinare più criteri all'interno dell'oggetto array, ad esempio "trova tutto dove la porta è 9000 e il protocollo è UDP". Ciò non sarebbe supportato con la struttura dei dati. Non sono sicuro del perché port_info
è un array di oggetti (forse per situazioni incerte in cui una porta potrebbe appartenere a due servizi diversi?) - se fosse un singolo oggetto, anche il $elemMatch
sarebbe supportato.
Inoltre, tieni presente che una tale query restituirà sempre l'intero oggetto.