Du bør ikke have { "orgId" : 2 }
i opdateringsdokumentet.
Fjern denne linje fra koden, og den skulle fungere fint.
u.append("orgId", orgId);
Grunden til, at du udløste fejlen, var, at der er to måder at angive opdateringen for et dokument på, og du har oprettet en krydsning af begge. Mulighederne er:
- Vis det komplette dokument til opdateringen. For denne model overskrives det eksisterende dokument af det medfølgende dokument.
- Bruger opdateringsoperatører til at ændre det eksisterende dokument i samlingen.
Hvis du bruger den anden version, vil alle "tasterne på øverste niveau" i opdateringsdokumentet starte med en $
. Hvis du bruger den første mulighed, vil ingen af nøglerne på øverste niveau starte med en $
. Koden så på det første felt, troede, at det var et erstatningsdokument og mislykkedes så, da den forsøgte at validere, at resten af dokumentet var gyldigt, da nøgler i dokumenter ikke kan starte med en $
(for at det ikke skal forveksles med opdaterings- eller forespørgselsdokumenter).
Rediger:
I tilfælde af en upsert (f.eks. eksisterer dokumentet ikke allerede, og du markerer opdateringen for at tillade upsert), bruges forespørgslens eksakte match-operatorer til at se dokumentet. For ovenstående eksempel får vi et startdokument med { "orgId" : 2 }
. Serveren vil derefter anvende opdateringsoperatørerne og gemme resultatet.