2

put 操作を介して REST API で基本的な CRUD スタイルを更新したいと考えています。@model が子クラスの mongoose.model ('Company', schema) のような mongoose Model である coffeescript 基本クラスがあります。私は、PUT/update を行う 2 つの方法を考えています。

und = require 'underscore'

class CRUDApi

  # using findByIdAndUpdate
  update1: (req, res) =>
    data = und.clone req.body
    delete data._id # so mongo doesn't complain
    @model.findByIdAndUpdate req.params.id, data, (e, r) ->
      res.send r

  # using update
  update2: (req, res) =>
    data = und.clone req.body
    delete data._id # so mongo doesn't complain
    @model.update { _id: req.params.id }, data, (e, r) ->
      res.send req.body

私の質問は次のとおりです。

1) update と findByIdAndUpdate の間にパフォーマンスの違いはありますか? findByIdAndUpdate は、特に 'r' で結果を返すのに対し、インクリメント カウントだけを返すため、構文としてはより良い選択のように思われます。これは、req.body で update2() で応答を「偽造」するよりも気分が良くなります。

2) また、マングースが文句を言わないように、リクエストを複製して _.id プロパティを削除するのは非常に厄介です。これは通常のアプローチですか?

4

1 に答える 1

3

1) There are performance benefits to using a mongoose's findByXAndUpdate() if you want to get back the document that was updated. Underneath, it uses mongo's findAndModify method, which has an option to return the updated document after the update. The alternative is to do a find() after the update to get the document. It's probably not a good practice to return the posted body, as it shouldn't be trusted since it's from the user, and it wouldn't account for return complete documents where partial updates are allowed.

2) It is definitely a good practice to filter the incoming data from req.body to just the fields you're expecting, especially since you're passing them right into the model's update function. Stripping off _id seems appropriate.

于 2013-04-14T01:26:02.047 に答える