Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] adicionando nova propriedade

Fiquei curioso quanto a seguinte situação :

Tenho um banco de dandos com um schema ja definido, porém preciso estar adicionando uma nova propriedade para o schema e consequentemente para todos os documentos da minha coleção. Porem eu ja tenho centenas/milhares de documentos ja cadastradas no banco. Como eu poderia estar adicionando esse novo metodo (exemplo : descrição) para toda coleção ?

3 respostas
solução!

Olá, Leonardo! Como vai?

No MongoDB, você pode adicionar uma nova propriedade a um schema já existente e ela será aplicada a todos os novos documentos que você criar. No entanto, essa nova propriedade não será automaticamente adicionada aos documentos já existentes na coleção.

Para adicionar essa nova propriedade a todos os documentos já existentes, você precisará realizar uma operação de atualização em massa. No MongoDB, você pode usar o método updateMany() para isso.

Por exemplo, se você quiser adicionar uma nova propriedade chamada "descricao" a todos os documentos em sua coleção de livros, você poderia fazer algo assim:

Livro.updateMany(
   { }, 
   { $set: { "descricao": "" } }
)

Nesse caso, o primeiro parâmetro { } é o filtro que seleciona todos os documentos na coleção. O segundo parâmetro é a operação de atualização que queremos realizar. Aqui, estamos usando o operador $set para adicionar a nova propriedade "descricao" a todos os documentos selecionados. Estamos inicializando essa nova propriedade como uma string vazia "".

Lembre-se de que essa operação pode levar algum tempo para ser concluída, dependendo do número de documentos em sua coleção.

Espero ter ajudado e bons estudos!

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

Entedi o que você disse, agora levando em consideração a documentação (que no caso do mongoose eu acho ruim e MUITOOOO confuso) eu estaria aplicando o Model.updateMany() passando o filtro (que no caso são todos os documentos ({ }) e no segundo parametro estou aplicando o Document.prototype.$set() para adicionar a nova propriedade com chave/valor (no caso chave "descrição" e valor vazio). Apenas confirmando, é isso ?

Opa, Leonardo! Joia?

Sim, sua compreensão está correta.

Ao utilizar Model.updateMany() do Mongoose, você passa o filtro como o primeiro parâmetro e sim, dessa forma {} seria para todos os documentos. E sim, você pode usar Document.prototype.$set() para adicionar a nova propriedade com chave/valor desejado.

Isso irá atualizar todos os documentos correspondentes no banco de dados conforme o filtro fornecido.