Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 与findByIdAndUpdate相比,更新是否有mongoose性能优势_Node.js_Mongoose - Fatal编程技术网

Node.js 与findByIdAndUpdate相比,更新是否有mongoose性能优势

Node.js 与findByIdAndUpdate相比,更新是否有mongoose性能优势,node.js,mongoose,Node.js,Mongoose,我想通过put操作用RESTAPI更新基本CRUD样式。我有一个coffeescript基类,其中@model是一个mongoose模型,类似于子类中的mongoose.model('Company',schema)。我介绍了两种执行PUT/update的方法: und = require 'underscore' class CRUDApi # using findByIdAndUpdate update1: (req, res) => data = und.clon

我想通过put操作用RESTAPI更新基本CRUD样式。我有一个coffeescript基类,其中@model是一个mongoose模型,类似于子类中的mongoose.model('Company',schema)。我介绍了两种执行PUT/update的方法:

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) 另外,克隆请求并删除uux.id属性似乎很尴尬,这样mongoose就不会抱怨了。这是正常的做法吗

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

2) 将从req.body传入的数据过滤到您期望的字段,这无疑是一个很好的做法,特别是因为您将它们直接传递到模型的更新函数中。脱掉id似乎是合适的