2

我想通过 put 操作使用 REST api 更新基本的 CRUD 样式。我有一个咖啡脚本基类,其中@model 是一个猫鼬模型,例如子类中的 mongoose.model ('Company', schema)。我正在使用两种方式进行 PUT/更新:

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' 中的结果而不是增量计数,这比在 update2() 中使用 req.body '伪造'响应感觉更好

2)克隆请求并删除 _.id 属性似乎也很尴尬,所以猫鼬不会抱怨。这是正常的做法吗?

4

1 回答 1

3

findByXAndUpdate()1)如果您想取回已更新的文档,使用 mongoose 会带来性能优势。下面,它使用了 mongo 的findAndModify方法,该方法有一个选项,可以在更新后返回更新的文档。另一种方法是find()在更新后执行以获取文档。返回发布的正文可能不是一个好习惯,因为它不应该被信任,因为它来自用户,并且它不会考虑返回允许部分更新的完整文档。

2) 将传入的数据从 req.body 过滤到您期望的字段绝对是一个好习惯,特别是因为您将它们直接传递到模型的更新函数中。剥离 _id 似乎是合适的。

于 2013-04-14T01:26:02.047 回答