1
resposta

adicionando novo campo ao documentos

estou fazendo em paralelo um exemplo diferente do que foi passado. Assim quando adiciono novo documentos existentes, usando arrays de objetos para representar múltiplas compras por cliente por exemplo, cada compra será um objeto dentro do array compras, com as especificações da compra. Vou no terminal mongoDB shell. no caso adiciono:"db.vendas.updateOne(

{ nome: "João" },

{ $set: {

compras: [

  { nome_produto: "Notebook", preco: 5000.00, quantidade: 1 }

]

}}

)
{
acknowledged: true,
insertedId: null,
matchedCount: 0,
modifiedCount: 0,
upsertedCount: 0
}
e quando vou validar clico no simbolo de atualizar o banco, porem nao aparece nenhum erro e nao aparece esta adição ao banco de dados. o que posso esta errando. pois ja ate fechei e abri novamente o mongoDB Compass e nao aparece esta ultima inserção?

1 resposta

Ei! Tudo bem, Eduardo?

Observe o retorno que você recebeu do comando:

matchedCount: 0
modifiedCount: 0

O MongoDB processou o comando com sucesso (não houve erro de sintaxe), mas ele não encontrou nenhum documento na coleção vendas que tenha exatamente o campo nome com o valor "João". Como não encontrou ninguém, ele não atualizou nada.

Isso pode estar acontendo porque:

  • Há uma diferença nos nomes, veja se no seu banco de dados, o documento realmente está escrito como "João" (com til). Se estiver cadastrado como "Joao", o filtro { nome: "João" } não vai encontrar o registro.
  • A coleação pode estar errada, verifique isso. No Mongosh, digite use nome_do_seu_banco antes de rodar o db.vendas.updateOne.
  • Espaços extras no nome, o que faz a busca falhar.

Cheque se o registro que você procura realmente existe, execute este comando antes do update:

db.vendas.find({ nome: "João" })
  • Se o comando não retornar nada, o documento não existe com esse nome. Tente buscar apenas com db.vendas.find() para ver o que tem na coleção e confirmar como o nome está escrito.

Ou se o comando retornar o documento, teente rodar o updateOne novamente, mas garanta que o nome está exatamente igual ao que apareceu no find.

Espero que essas dicas o ajude. Qualquer dúvida é só compartilhar no fórum, estaremos por aqui.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado