3
respostas

Como inserir novos campos em uma collection?

Alguém sabe me dizer como inserir novos campos em uma collection? Exemplo, tenho uma collection com nome "usuário", um primeiro form onde o usuário vai cadastrar um nome de usuário e senha, depois outro form onde o usuário ira adicionar mais dados, endereço idade escolaridade etc. Quando tento inserir esses dados (do segundo form) via "findByIdAndUpdate" do mongoose ele substitui os campos usuário e senha pelos campos, endereço idade escolaridade etc, como faço para adicionar esses novos campos sem substituir os antigos, ou a collection é imutável a partir do momento em que criamos ela?

3 respostas

Fala aí Paulo, beleza? Se você usar o findByIdAndUpdate ele vai simplesmente sobrepor o JSON que você está enviando sobre o JSON já existente no banco.

Para fazer o que você precisa, temos duas maneiras.

  • Primeira, você deve buscar o JSON do banco com apenas findById, depois, mescle os dois JSON, algo assim:
model
    .findById()
    .exec()
    .then(model => {
        model = { ...model, endereco, escolaridade };
    });

E salva novamente.

  • Segunda, utilize o update com set do mongodb, algo assim:
Model.update({ _id : ALGUM_ID }, { $set: { endereco }})

Não lembro de cabeça, mas, seria mais ou menos assim.

Espero ter ajudado.

Olá, Matheus obrigado pela dica, tentei usar o updade mais mas não estou conseguindo, estou com duvida sobre a sintaxe. Usei o seguinte código:

        model.update({'_id': req.params.id}, {$set : req.body})
        .then(function(user){
            res.json(user);
            console.log(user);
        },function(err){
            console.log(err);
            res.sendStatus(500);
        })

Ele está retornando a seguinte mensagem: { ok: 0, n: 0, nModified: 0} e simplesmente não atualiza a collection.

Fala ai Paulo, não está dando nenhum erro?

O req.params.id está vindo com o id corretamente?

Como está o seu req.body?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software