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:
- Forneça o documento completo para a atualização. Para este modelo, o documento existente é substituído pelo documento fornecido.
- 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.