更新操作与findByIdAndUpdate相比,是否有mongoose性能方面的优势

3
我希望通过PUT操作使用REST API更新基本的CRUD样式。 我有一个Coffeescript基类,其中@model是像mongoose.model('Company',schema)这样的mongoose模型在其子类中。 我正在讨论两种进行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属性以避免mongoose抱怨似乎很尴尬。这是正常的做法吗?

1个回答

4
1) 如果您想要获得更新的文档,使用mongoose的findByXAndUpdate()会带来性能方面的好处。在内部,它使用mongo的findAndModify方法,该方法具有在更新后返回更新的文档的选项。另一种选择是在更新后使用find()来获取文档。最好不要返回已发布的主体,因为不能信任它,因为它来自用户,并且它也无法处理允许部分更新的完整文档的返回。
2) 过滤req.body中的传入数据只保留您期望的字段绝对是一个好习惯,特别是因为您将它们直接传递给模型的更新函数。删除_id似乎是合适的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接