2016-05-17 104 views
6

findOneAndUpdate方法無法正常工作。我試圖一次更新所有的字段,但它只是更新(設置)最後一個字段。它始終只是最後一個領域。有人能告訴我我做錯了什麼,或者我能做些什麼來達到預期效果?Mongoose findOneAndUpdate更新多個字段

這是我的findOneAndUpdate代碼:

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); 
     } 
}); 

回答

16

您正在使用$set操作多次。爲$set正確的語法是:

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

你需要改變你的更新的說法是這樣的:

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); 
    } 
}); 
+0

如果你想$設置和$推在同一findByIdAndUpdate場?語法如何呢? –

+2

@ 55Cancri所有你需要的就是將'$ push:{0},{0}}}添加到「update」參數中:'{$ set:{,...},$ push:{,..}}' – styvane