Hassen Fadhlaoui
Hassen Fadhlaoui

Reputation: 187

How to pass a var in an mongodb query in node js

I want to pass a variable to the query, but I didn't find out how:

 db.collection('users').update(
  { "_id":ObjectID(req.params.id)},
  { $set:  { tasks[req.params.pos].done : true }}
  ,(error,resultat)=>{
       if (resultat){
         console.log("mise a jour avec succes ");
         res.send({message:"mise a jour avec succes "});
       } else {
         console.log("Erreur lors du mise a jour ");
         res.send({message:"Erreur lors du mise a jour "});
       }  

     });

and this is the mongodob document I want to change the field done but with the index from a variable like : var x = 5 " task[x].done = true "

{
"_id" : ObjectId("5a730e55114dbc2a0455c630"),
"email" : "[email protected]",
"password" : "unknown",
"tasks" : [ 
    {
        "title" : "new 5",
        "description" : "dod ododoododododo",
        "date" : "2018-02-07T18:25:14.881Z",
        "done" : false
    }, 
    {
        "title" : "new2",
        "description" : "dod ododoododododo",
        "date" : "2018-02-07T18:25:14.881Z",
        "done" : false
    }
]
}

Upvotes: 1

Views: 1151

Answers (2)

Hassen Fadhlaoui
Hassen Fadhlaoui

Reputation: 187

Here is the solution Thank You all for contributing in solving this problem

connection((db)=>{

let tid = { ["tasks."+req.params.pos+".done"] : true };

let query = { "_id": ObjectID(req.params.id) };

db.collection('users').update(
  { "_id":ObjectID(req.params.id)},
  { $set:    tid}
  ,(error,resultat)=>{
       if (resultat){
         console.log("mise a jour avec succes ");
         res.send({message:"mise a jour avec succes "});
       } else {
         console.log("Erreur lors du mise a jour ");
         res.send({message:"Erreur lors du mise a jour "});
       }  

     });
})

Upvotes: 0

sharkdawg
sharkdawg

Reputation: 984

From the Mongo docs you need to use the positional $ operator

    db.collection('users')
    .update({'tasks.title': 'new2'}, 
    {'$set': {'tasks.$.done': false}},
    (error,resultat)=>{...

Upvotes: 1

Related Questions