2016-05-17 17 views
6

FindOneAndUpdate yöntemi düzgün çalışmıyor. Tüm alanları bir kerede güncellemeye çalışıyorum ama sadece son alanı güncelliyor (ayarlıyor). Her zaman sadece son alan. Birisi bana neyi yanlış yaptığımı söyler mi ya da beklenen etkiyi yapmak için ne yapabilirim?Mongoose findOneAndUpdate Çoklu Alanları Güncelleştirme

Bu benim findOneAndUpdate kod şudur: $set operatör birden çok kez kullanırken

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

cevap

16

. $set için doğru sözdizimi şöyledir: Eğer güncelleme böyle argüman değiştirmeniz gerekir

{ $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

Ne aynı findByIdAndUpdate alanına $ kurmak ve $ itme isteseydi? Sözdizimi nasıl görünür? –

+2

@ 55Cancri, "$ push: {: , ..}" parametresini "update" argümanına eklemek: "{$ set: {: , ...}, $ push: { : , ..}} ' – styvane