MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Dokumentfeldnamen dürfen nicht mit „$“ beginnen (Bad Key:„$set“)

Sie sollten { "orgId" : 2 } nicht haben im Update-Dokument.

Entfernen Sie diese Zeile aus dem Code und es sollte gut funktionieren.

u.append("orgId", orgId);

Der Grund, warum Sie den Fehler ausgelöst haben, war, dass es zwei Möglichkeiten gibt, die Aktualisierung für ein Dokument anzugeben, und Sie ein Kreuzbrot aus beiden erstellt haben. Die Optionen sind:

  1. Stellen Sie das vollständige Dokument für das Update bereit. Bei diesem Modell wird das vorhandene Dokument durch das bereitgestellte Dokument überschrieben.
  2. Verwendet Aktualisierungsoperatoren, um das vorhandene Dokument in der Sammlung zu ändern.

Wenn Sie die zweite Version verwenden, beginnen alle "Schlüssel der obersten Ebene" im Update-Dokument mit einem $ . Wenn Sie die erste Option verwenden, beginnt keine der Tasten der obersten Ebene mit einem $ . Der Code hat sich das erste Feld angesehen, dachte, es sei ein Ersatzdokument und schlug dann fehl, als er versuchte, den Rest des Dokuments zu validieren, da Schlüssel in Dokumenten nicht mit einem $ beginnen können (damit sie nicht mit Aktualisierungs- oder Abfragedokumenten verwechselt werden).

Bearbeiten:

Im Falle eines Upsert (z. B. wenn das Dokument noch nicht existiert und Sie die Aktualisierung kennzeichnen, um das Upsert zuzulassen) werden die exakten Übereinstimmungsoperatoren der Abfrage zum Seeding des Dokuments verwendet. Für das obige Beispiel erhalten wir ein Seed-Dokument von { "orgId" : 2 } . Der Server wendet dann die Aktualisierungsoperatoren an und speichert das Ergebnis.