2016-05-17 23 views
6

Il metodo findOneAndUpdate non funziona correttamente. Sto cercando di aggiornare tutti i campi contemporaneamente, ma è solo l'aggiornamento (impostazione) dell'ultimo campo. È sempre solo l'ultimo campo. Qualcuno può dirmi cosa sto facendo male o cosa posso fare per avere l'effetto previsto?Mongoose findOneAndUpdate Aggiornamento di più campi

Questo è il mio codice 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); 
     } 
}); 

risposta

16

Si utilizza i $set operatore più volte. La sintassi corretta per $set è:

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

È necessario modificare l'aggiornamento argomento come questo:

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

Che cosa succede se si voleva $ impostare e $ spinta nello stesso campo findByIdAndUpdate? Come sarebbe allora la sintassi? –

+2

@ 55Cancri tutto ciò che serve è aggiungere il '$ push: {: , ..}' all'argomento "aggiornamento": '{$ set: {: , ...}, $ push: { : , ..}} ' – styvane