2016-11-07 5 views
0

I次のスキーマがあります。私はPUTを送信するときに今マングースModel.update() - 更新のみ提供される値

// Route to update a quote in the DB 
app.put('/words/:id', function(req, res) { 
    const quote = new Word({ 
    _id: req.params.id, 
    author: req.body.author, 
    quote: req.body.quote, 
    source: req.body.source, 
    rating: req.body.rating, 
    updatedAt: Date.now(), 
    }); 
    Word.update(quote, function(err, raw) { 
    if (err) { 
     res.send(err); 
    } 
    res.send(raw); 
    }); 
}); 

const wordSchema = mongoose.Schema({ 
    author: {type: String, index: true, default: 'unknown'}, 
    quote: String, 
    source: {type: String, default: 'unknown', index: true}, 
    rating: {type: Number, default: 0}, 
    createdAt: {type: Date, default: Date.now}, 
    updatedAt: {type: Date, default: Date.now}, 
}); 

そして、私の急行アプリで、次のPUTルートをリクエストで、デフォルト値で設定されたパラメータが提供されない場合、それらはスキーマのデフォルト値で埋められます。提供された値のみを更新するにはどうすればよいですか?

ありがとうございました。

app.put('/words/:id', function(req, res) { 
    const doc = { 
    author: req.body.author, 
    quote: req.body.quote, 
    source: req.body.source, 
    rating: req.body.rating, 
    updatedAt: Date.now(), 
    }); 
    Word.update({_id: req.params.id}, doc, function(err, raw) { 
    if (err) { 
     res.send(err); 
    } 
    res.send(raw); 
    }); 
}); 

答えて

5

更新のための新しいWordインスタンスを作成しないでください、updateが条件とあなたが個別に更新し、その更新された値を提供するために、文書を識別できdocオブジェクトのパラメータを取りますModel.findByIdAndUpdate()アトミック操作名ではないすべての最上位の更新キーは、set操作として扱われ、defaults/setterは実行されません。私は更新されたドキュメントを取得する方法

// Route to update a quote in the DB 
app.put('/words/:id', function(req, res) { 
    const update = updated = _.assign({ "updatedAt": new Date() }, req.body); 
    Word.findByIdAndUpdate(req.params.id, update, function(err, raw) { 
     if (err) { 
      res.send(err); 
     } 
     res.send(raw); 
    }); 
}); 
+0

ワンダー:あなたはupdatedAtフィールドを設定するlodashの_.assign()メソッドを使用できますか? – MrBr

+0

@MrBr https://stackoverflow.com/questions/30419575/mongoose-findbyidandupdate-not-returning-correct-modelを参照してください。 – JohnnyHK

0

あなたが使用して試すことができます:

関連する問題