Neměli byste mít { "orgId" : 2 }
v aktualizačním dokumentu.
Odstraňte tento řádek z kódu a mělo by to fungovat dobře.
u.append("orgId", orgId);
Důvod, proč jste spustili chybu, byl ten, že existují dva způsoby, jak specifikovat aktualizaci pro dokument, a vytvořili jste kříženec obou. Možnosti jsou:
- Poskytněte úplný dokument pro aktualizaci. U tohoto modelu je existující dokument přepsán poskytnutým dokumentem.
- Používá operátory aktualizace k úpravě stávajícího dokumentu v kolekci.
Pokud používáte druhou verzi, pak všechny "klíče nejvyšší úrovně" v dokumentu aktualizace budou začínat znakem $
. Pokud použijete první možnost, žádná z kláves nejvyšší úrovně nebude začínat znakem $
. Kód se podíval na první pole, myslel si, že jde o náhradní dokument, a pak selhal, když se pokusil ověřit platnost zbytku dokumentu, protože klíče v dokumentech nemohou začínat znakem $
(aby nedošlo k záměně s aktualizačními nebo dotazovacími dokumenty).
Upravit:
V případě upsert (např. dokument již neexistuje a označíte aktualizaci, abyste povolili upsert) se k vložení dokumentu použijí operátory přesné shody dotazu. Pro výše uvedený příklad získáme výchozí dokument { "orgId" : 2 }
. Server poté použije operátory aktualizace a uloží výsledek.