- L'errore di sintassi è dovuto al fatto che devi usare le virgolette attorno a
services.port_info - Tuttavia,
$elemMatchin campi nidificati non è attualmente supportato comunque - Fortunatamente, non hai bisogno di
$elemMatchper 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.