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

Upsert Array Elements che corrispondono ai criteri in un documento MongoDB?

Ciò di cui hai bisogno non è possibile utilizzando un singolo aggiornamento senza una logica lato app. Tieni presente che l'upsert come funzionalità non è rilevante per questo problema specifico a meno che tu non voglia creare automaticamente nuovi documenti Widget se non ne esistono con il nome fornito.

Il problema che stai riscontrando è che non esiste alcuna funzionalità che ti consenta di eseguire due diversi aggiornamenti a seconda dell'esistenza di un elemento dell'array. Le tue uniche due opzioni sono:

  1. Trova l'elemento, determina l'esistenza di proprietà rilevanti, compila un aggiornamento appropriato con le tue proprietà nuove o modificate ed eseguilo. Ciò comporta l'importante svantaggio che questo non è un metodo sicuro per la concorrenza. In altre parole, se due servizi Web tentano questo allo stesso, uno potrebbe sovrascrivere le modifiche l'uno dell'altro.
  2. Rendi le proprietà dei widget documenti di primo livello anziché incorporati. Ti permette di usare upsert per fare quello che vuoi. L'ovvio svantaggio è che non è un'opzione molto interessante in termini di progettazione dello schema. Non otterresti automaticamente tutte le proprietà se prelevi un widget, ad esempio.