Nie powinieneś mieć { "orgId" : 2 }
w dokumencie aktualizacji.
Usuń ten wiersz z kodu i powinien działać poprawnie.
u.append("orgId", orgId);
Powodem, dla którego wywołałeś błąd, było to, że istnieją dwa sposoby określenia aktualizacji dla dokumentu i utworzyłeś chleb krzyżowy obu. Dostępne opcje to:
- Dostarcz kompletny dokument do aktualizacji. W przypadku tego modelu istniejący dokument jest nadpisywany przez dostarczony dokument.
- Używa operatorów aktualizacji do modyfikowania istniejącego dokumentu w kolekcji.
Jeśli używasz drugiej wersji, wszystkie „klucze najwyższego poziomu” w dokumencie aktualizacji będą zaczynały się od $
. Jeśli użyjesz pierwszej opcji, żaden z klawiszy najwyższego poziomu nie będzie zaczynał się od $
. Kod spojrzał na pierwsze pole, pomyślał, że jest to dokument zastępczy, a następnie nie powiódł się, gdy próbował sprawdzić poprawność reszty dokumentu, ponieważ klucze w dokumentach nie mogą zaczynać się od $
(aby nie pomylić z dokumentami aktualizacji lub zapytań).
Edycja:
W przypadku upsert (np. dokument jeszcze nie istnieje i oznaczysz aktualizację, aby zezwolić na upsert), operatory dokładnego dopasowania zapytania są używane do wprowadzania dokumentu. W powyższym przykładzie otrzymujemy dokument źródłowy { "orgId" : 2 }
. Serwer zastosuje następnie operatory aktualizacji i zapisze wynik.