DEV Community

Uriel dos Santos Souza
Uriel dos Santos Souza

Posted on

1 1

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!

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site