sql >> Databasteknik >  >> NoSQL >> MongoDB

Dokumentfältnamn kan inte börja med '$' (dålig nyckel:'$set')

Du bör inte ha { "orgId" : 2 } i uppdateringsdokumentet.

Ta bort den här raden från koden så borde den fungera bra.

u.append("orgId", orgId);

Anledningen till att du utlöste felet var att det finns två sätt att ange uppdateringen för ett dokument och att du skapade en korsning av båda. Alternativen är:

  1. Tillhandahåll det fullständiga dokumentet för uppdateringen. För denna modell skrivs det befintliga dokumentet över av det medföljande dokumentet.
  2. Använder uppdateringsoperatorer för att ändra det befintliga dokumentet i samlingen.

Om du använder den andra versionen kommer alla "toppnivånycklar" i uppdateringsdokumentet att börja med en $ . Om du använder det första alternativet kommer ingen av tangenterna på toppnivån att börja med en $ . Koden tittade på det första fältet, trodde att det var ett ersättningsdokument och misslyckades sedan när den försökte validera att resten av dokumentet var giltigt eftersom nycklar i dokument inte kan börja med en $ (att de inte ska förväxlas med uppdaterings- eller frågedokument).

Redigera:

I fallet med en upsert (t.ex. dokumentet finns inte redan och du flaggar uppdateringen för att tillåta upsert) används sökfrågans exakta matchningsoperatorer för att se dokumentet. För exemplet ovan får vi ett frödokument med { "orgId" : 2 } . Servern kommer sedan att tillämpa uppdateringsoperatorerna och spara resultatet.




  1. Mongoose:djup population (befolka ett befolkat fält)

  2. MongoDB $cos

  3. Hur pushar man till en MongoDB-array med AngularJS?

  4. Hur kan jag be MongoDB att utvärdera lite JavaScript för att få värde för ett fält?