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 :
- Fournir le document complet pour la mise à jour. Pour ce modèle, le document existant est remplacé par le document fourni.
- 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.