sql >> Database teknologi >  >> NoSQL >> MongoDB

Dokumentfeltnavne kan ikke starte med '$' (dårlig nøgle:'$set')

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:

  1. Vis det komplette dokument til opdateringen. For denne model overskrives det eksisterende dokument af det medfølgende dokument.
  2. 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.




  1. Hvordan autowired RedisTemplate<String,Long>

  2. MongoTimeoutException:Ingen servermatch - MongoDB Atlas

  3. MongoDB 4.0 JREundtagelse:"Markør"-indstillingen er påkrævet, undtagen for aggregering med forklare-argumentet

  4. Manuelle referencer understøtter