sql >> Base de Datos >  >> NoSQL >> MongoDB

Los nombres de los campos del documento no pueden comenzar con '$' (clave incorrecta:'$set')

No debe tener el { "orgId" : 2 } en el documento de actualización.

Elimina esta línea del código y debería funcionar bien.

u.append("orgId", orgId);

La razón por la que disparó el error fue que hay dos formas de especificar la actualización de un documento y creó un pan cruzado de ambos. Las opciones son:

  1. Proporcione el documento completo para la actualización. Para este modelo, el documento existente se sobrescribe con el documento proporcionado.
  2. Utiliza operadores de actualización para modificar el documento existente en la colección.

Si usa la segunda versión, todas las "claves de nivel superior" en el documento de actualización comenzarán con un $ . Si usa la primera opción, ninguna de las teclas de nivel superior comenzará con un $ . El código miró el primer campo, pensó que era un documento de reemplazo y luego falló cuando intentó validar que el resto del documento era válido ya que las claves en los documentos no pueden comenzar con un $ (para que no se confundan con documentos de actualización o consulta).

Editar:

En el caso de un upsert (p. ej., el documento aún no existe y usted marca la actualización para permitir el upsert), los operadores de coincidencia exacta de la consulta se utilizan para inicializar el documento. Para el ejemplo anterior, obtenemos un documento semilla de { "orgId" : 2 } . El servidor aplicará los operadores de actualización y guardará el resultado.