pdace
pdace

Reputation: 467

Mongoose findOneAndUpdate Updating Multiple Fields

The findOneAndUpdate method doesn't work properly. I'm trying to update all the fields all at once but it's only updating (setting) the last field. It's always only the last field. Can someone tell me what I'm doing wrong or what can I do to have the expected effect?

This is my findOneAndUpdate code:

Book.findOneAndUpdate({_id:bookId},{$set:{"name": name},$set:{"genre": genre},$set:{"author": author},$set:{"similar": similar}}).exec(function(err, book){
       if(err){
           console.log(err);
           res.status(500).send(err);
       } else {
            res.status(200).send(book);
       }
});

Upvotes: 31

Views: 52978

Answers (1)

Sede
Sede

Reputation: 61225

You are using the $set operator multiple times. The correct syntax for $set is :

{ $set: { <field1>: <value1>, ... } }

You need to change your update argument like this:

Book.findOneAndUpdate({ "_id": bookId }, { "$set": { "name": name, "genre": genre, "author": author, "similar": similar}}).exec(function(err, book){
   if(err) {
       console.log(err);
       res.status(500).send(err);
   } else {
            res.status(200).send(book);
   }
});

Upvotes: 67

Related Questions