MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggiornamento e ricerca della struttura incorporata di Mongodb?

  1. L'errore di sintassi è dovuto al fatto che devi usare le virgolette attorno a services.port_info
  2. Tuttavia, $elemMatch in campi nidificati non è attualmente supportato comunque
  3. 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.