Не трябва да имате { "orgId" : 2 }
в документа за актуализация.
Премахнете този ред от кода и той трябва да работи добре.
u.append("orgId", orgId);
Причината да задействате грешката е, че има два начина за указване на актуализацията за документ и сте създали кръстоска от двата. Опциите са:
- Предоставете пълния документ за актуализацията. За този модел съществуващият документ се презаписва от предоставения документ.
- Използва оператори за актуализиране, за да модифицира съществуващия документ в колекцията.
Ако използвате втората версия, тогава всички „ключове от най-високо ниво“ в документа за актуализация ще започват с $
. Ако използвате първата опция, нито един от ключовете от най-високо ниво няма да започва с $
. Кодът разгледа първото поле, помисли, че това е заместващ документ и след това се провали, когато се опита да потвърди, че останалата част от документа е валидна, тъй като ключовете в документите не могат да започват с $
(за да не се бърка с документи за актуализиране или заявка).
Редактиране:
В случай на upsert (напр. документът все още не съществува и вие маркирате актуализацията, за да разрешите upsert) операторите за точно съвпадение на заявката се използват за зареждане на документа. За горния пример получаваме начален документ на { "orgId" : 2 }
. След това сървърът ще приложи операторите за актуализиране и ще запази резултата.