sql >> Database >  >> NoSQL >> MongoDB

Documentveldnamen mogen niet beginnen met '$' (Onjuiste sleutel:'$set')

U mag de { "orgId" : 2 } . niet hebben in het updatedocument.

Verwijder deze regel uit de code en het zou goed moeten werken.

u.append("orgId", orgId);

De reden dat u de fout veroorzaakte, was dat er twee manieren zijn om de update voor een document op te geven en dat u een kruisbrood van beide hebt gemaakt. De opties zijn:

  1. Geef het volledige document voor de update. Bij dit model wordt het bestaande document overschreven door het meegeleverde document.
  2. Gebruikt update-operators om het bestaande document in de verzameling te wijzigen.

Als u de tweede versie gebruikt, beginnen alle "topniveau-sleutels" in het updatedocument met een $ . Als u de eerste optie gebruikt, begint geen van de toetsen op het hoogste niveau met een $ . De code keek naar het eerste veld, dacht dat het een vervangend document was en mislukte toen het probeerde te valideren dat de rest van het document geldig was, omdat sleutels in documenten niet kunnen beginnen met een $ (opdat het niet verward kan worden met update- of querydocumenten).

Bewerken:

In het geval van een upsert (bijv. het document bestaat nog niet en u markeert de update om de upsert toe te staan) worden de exacte match-operators van de query gebruikt om het document te seeden. Voor het bovenstaande voorbeeld krijgen we een seed-document van { "orgId" : 2 } . De server zal dan de update-operators toepassen en het resultaat opslaan.




  1. MongoDB Compass - vastgelopen bij verbinding met Atlas

  2. Automatische verhoging in MongoDB om de volgorde van de unieke gebruikers-ID op te slaan

  3. Isodate converteren naar numerieke waarde

  4. MongoDB C#:ID-serialisatie beste patroon