Reputation: 117
I have the following route to find and update an array in MongoDB:
app.post("/respostaAprovChamado", function(req, res){
if(req.isAuthenticated()){
Chamado.updateMany(
{"_id": req.body.idChamadoPost, "listaAprovadores.0.nome": { $in: [req.user.realNome] }},
{
$set: {'listaAprovadores.0': [{nome: req.user.realNome}, {status: req.body.respostaAprov}]}
},
{
returnNewDocument: true
}
, function( error, result){
if(error){
res.send(error)
} else{
res.redirect('/aprovChamados')
}
});
}else{
res.redirect('/login')
}
})
It works fine, but the "listaAprovadores.0.nome"
will update the first record in the array, so i tried to iterate using for() to update the second record:
app.post("/respostaAprovChamado", function(req, res){
for(let i = 0; i < 1; i++){
if(req.isAuthenticated()){
Chamado.updateMany(
{"_id": req.body.idChamadoPost, "listaAprovadores.i.nome": { $in: [req.user.realNome] }},
{
$set: {'listaAprovadores.0': [{nome: req.user.realNome}, {status: req.body.respostaAprov}]}
},
{
returnNewDocument: true
}
, function( error, result){
if(error){
res.send(error)
} else{
res.redirect('/aprovChamados')
}
});
}else{
res.redirect('/login')
}
}
})
but the for() does not work. How can i make the update to work iterating over the records of the array?
Upvotes: 0
Views: 99
Reputation: 2330
i
needs to be evaluated as part of the query.
Change: "listaAprovadores.i.nome"
to `listaAprovadores.${i}.nome`
app.post("/respostaAprovChamado", function(req, res){
for(let i = 0; i < 1; i++){
if(req.isAuthenticated()){
Chamado.updateMany(
{"_id": req.body.idChamadoPost, `listaAprovadores.${i}.nome`: { $in: [req.user.realNome] }},
{
$set: {'listaAprovadores.0': [{nome: req.user.realNome}, {status: req.body.respostaAprov}]}
},
{
returnNewDocument: true
}
, function( error, result){
if(error){
res.send(error)
} else{
res.redirect('/aprovChamados')
}
});
}else{
res.redirect('/login')
}
}
})
Upvotes: 1