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!
    
Top comments (0)