32
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
então você chama
SchemaMeu.finOne({_id})
const dados = SchemaMeu.finOne({_id})
dados.pessoa = 'uriel'
pessoa.save()
E isso salva que é uma beleza no banco!
Você deseja mais! Claro!
dados.votos[0] = [{pessoa:uriel, votos:33}]
pessoa.save()
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()
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!
32