MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Os nomes dos campos do documento não podem começar com '$' (Chave inválida:'$set')


Você não deve ter o { "orgId" : 2 } no documento de atualização.

Remova esta linha do código e deve funcionar bem.
u.append("orgId", orgId);

O motivo pelo qual você acionou o erro foi que existem duas maneiras de especificar a atualização para um documento e você criou um pão cruzado de ambas. As opções são:
  1. Forneça o documento completo para a atualização. Para este modelo, o documento existente é substituído pelo documento fornecido.
  2. Usa operadores de atualização para modificar o documento existente na coleção.

Se você usar a segunda versão, todas as "chaves de nível superior" no documento de atualização começarão com um $ . Se você usar a primeira opção, nenhuma das chaves de nível superior começará com um $ . O código olhou para o primeiro campo, pensou que era um documento de substituição e falhou quando tentou validar o restante do documento como válido, pois as chaves nos documentos não podem começar com um $ (para que não seja confundido com documentos de atualização ou consulta).

Editar:

No caso de um upsert (por exemplo, o documento ainda não existe e você sinaliza a atualização para permitir o upsert), os operadores de correspondência exata da consulta são usados ​​para propagar o documento. Para o exemplo acima, obtemos um documento semente de { "orgId" : 2 } . O servidor aplicará os operadores de atualização e salvará o resultado.