DEV Community

Uriel dos Santos Souza
Uriel dos Santos Souza

Posted on

Save() mongoose não salva modificação de array

Isso é apenas uma dica pra quem teve problemas ao modificar uma array do tipo misto usando o método save() do mongoose.

ele não vai salvar e se você é lerdo como eu.
Vai demorar horas e horas para achar o problema.

Já que o mongoose não lança erro.
Não acontece nada!

É muito simples.
O mongoose na hora que você utiliza o método save().
Ele primeiro faz uma verificação de tipos.
E o interessante é que ele não verifica tipo de array misto.

E eu me ferrei horas sem saber disso :)
Iniciante no mongoose!
um exemplo bobo e mal feito para entender


SchemaMeu = {
pessoa:string, 
votos:array [ pessoa:string, votos:number]
} 

//isso é apenas exemplo, não copie que vai dar problema
Enter fullscreen mode Exit fullscreen mode

então você chama
SchemaMeu.finOne({_id})

const dados = SchemaMeu.finOne({_id})
dados.pessoa = 'uriel'
pessoa.save()
Enter fullscreen mode Exit fullscreen mode

E isso salva que é uma beleza no banco!

Você deseja mais! Claro!

dados.votos[0] = [{pessoa:uriel, votos:33}]
pessoa.save()

Enter fullscreen mode Exit fullscreen mode

Não salva!
E você sofre, eu sofri...
Não da erro.
O meu pai o que ta acontecendo?

Você pesquisa errado, passei o dia pesquisando
sobre como modificar arrays no mongo e no mongoose.

Fiz tanta coisa... Nada me levava para o salvamento...

Então pesquisei por
mongoose save() not Work.

E pronto apareceu no primeiro link :(
que é este > https://stackoverflow.com/questions/35733647/mongoose-instance-save-not-working

O mongoose precisa de mais coisas para saber que você esta tentando salvar um array com tipo misto.

dados.votos[0] = [{pessoa:'uriel', votos:33}]
dados.markModified('votos')
pessoa.save()

Enter fullscreen mode Exit fullscreen mode

E salvou magicamente kkk.
Basicamente o mongoose verifica os tipos dos campos. E não faz isso sem um "aviso" em arrays....

Li isso aqui pois fiquei curioso >
https://sarav.co/understanding-markModified-in-mongoose

Abraços até mais!

Top comments (0)