MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Les noms de champs de document ne peuvent pas commencer par '$' (Bad Key :'$set')

Vous ne devriez pas avoir le { "orgId" : 2 } dans le document de mise à jour.

Supprimez cette ligne du code et cela devrait fonctionner correctement.

u.append("orgId", orgId);

La raison pour laquelle vous avez déclenché l'erreur est qu'il existe deux façons de spécifier la mise à jour d'un document et que vous avez créé un pain croisé des deux. Les options sont :

  1. Fournir le document complet pour la mise à jour. Pour ce modèle, le document existant est remplacé par le document fourni.
  2. Utilise les opérateurs de mise à jour pour modifier le document existant dans la collection.

Si vous utilisez la deuxième version, toutes les "clés de niveau supérieur" du document de mise à jour commenceront par un $ . Si vous utilisez la première option, aucune des clés de niveau supérieur ne commencera par un $ . Le code a examiné le premier champ, a pensé qu'il s'agissait d'un document de remplacement, puis a échoué lorsqu'il a tenté de valider que le reste du document était valide car les clés des documents ne peuvent pas commencer par un $ (de peur d'être confondu avec des documents de mise à jour ou de requête).

Modifier :

Dans le cas d'un upsert (par exemple, le document n'existe pas déjà et vous marquez la mise à jour pour autoriser l'upsert), les opérateurs de correspondance exacte de la requête sont utilisés pour amorcer le document. Pour l'exemple ci-dessus, nous obtenons un document de départ de { "orgId" : 2 } . Le serveur appliquera alors les opérateurs de mise à jour et enregistrera le résultat.