MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Имената на полетата на документа не могат да започват с „$“ (Грешен ключ:„$set“)

Не трябва да имате { "orgId" : 2 } в документа за актуализация.

Премахнете този ред от кода и той трябва да работи добре.

u.append("orgId", orgId);

Причината да задействате грешката е, че има два начина за указване на актуализацията за документ и сте създали кръстоска от двата. Опциите са:

  1. Предоставете пълния документ за актуализацията. За този модел съществуващият документ се презаписва от предоставения документ.
  2. Използва оператори за актуализиране, за да модифицира съществуващия документ в колекцията.

Ако използвате втората версия, тогава всички „ключове от най-високо ниво“ в документа за актуализация ще започват с $ . Ако използвате първата опция, нито един от ключовете от най-високо ниво няма да започва с $ . Кодът разгледа първото поле, помисли, че това е заместващ документ и след това се провали, когато се опита да потвърди, че останалата част от документа е валидна, тъй като ключовете в документите не могат да започват с $ (за да не се бърка с документи за актуализиране или заявка).

Редактиране:

В случай на upsert (напр. документът все още не съществува и вие маркирате актуализацията, за да разрешите upsert) операторите за точно съвпадение на заявката се използват за зареждане на документа. За горния пример получаваме начален документ на { "orgId" : 2 } . След това сървърът ще приложи операторите за актуализиране и ще запази резултата.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $tanh

  2. Резултатът от заявката за модел на Rails Mongoid връща грешна информация за размер/дължина/брой дори при използване на ограничение

  3. Как да получа _id на наскоро вмъкнатия документ след вмъкване с помощта на mongo csharp?

  4. TypeError:Не може да се извика метод „get“ на undefined

  5. Имената на полетата на документа не могат да започват с „$“ (Грешен ключ:„$set“)