Non dovresti avere il { "orgId" : 2 }
nel documento di aggiornamento.
Rimuovi questa riga dal codice e dovrebbe funzionare correttamente.
u.append("orgId", orgId);
Il motivo per cui hai attivato l'errore è che ci sono due modi per specificare l'aggiornamento per un documento e hai creato un pane incrociato di entrambi. Le opzioni sono:
- Fornire il documento completo per l'aggiornamento. Per questo modello il documento esistente viene sovrascritto dal documento fornito.
- Utilizza gli operatori di aggiornamento per modificare il documento esistente nella raccolta.
Se utilizzi la seconda versione, tutte le "chiavi di livello superiore" nel documento di aggiornamento inizieranno con un $
. Se utilizzi la prima opzione, nessuna delle chiavi di livello superiore inizierà con un $
. Il codice ha esaminato il primo campo, ha pensato che fosse un documento sostitutivo e poi ha fallito quando ha tentato di convalidare il resto del documento era valido poiché le chiavi nei documenti non possono iniziare con un $
(per non essere confuso con documenti di aggiornamento o query).
Modifica:
Nel caso di un upsert (ad esempio, il documento non esiste già e si contrassegna l'aggiornamento per consentire l'upsert) gli operatori di corrispondenza esatta della query vengono utilizzati per eseguire il seeding del documento. Per l'esempio sopra otteniamo un documento seme di { "orgId" : 2 }
. Il server applicherà quindi gli operatori di aggiornamento e salverà il risultato.