首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新vs findByIdAndUpdate是否有猫鼬性能的好处?

更新vs findByIdAndUpdate是否有猫鼬性能的好处?
EN

Stack Overflow用户
提问于 2013-04-13 23:31:07
回答 1查看 2.2K关注 0票数 3

我想通过put操作用REST更新基本CRUD风格。我有一个coffeescript基类,其中@model是一个像子类中的mongoose.model('Company',schema)这样的猫鼬模型。我正在讨论两种执行PUT/update的方法:

代码语言:javascript
复制
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属性似乎很尴尬,这样猫鼬就不会抱怨了。这是正常的做法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-14 01:26:02

1)如果您想要返回更新过的文档,使用猫鼬的findByXAndUpdate()会带来性能上的好处。在下面,它使用mongo的findAndModify方法,该方法可以在更新后返回更新后的文档。另一种方法是在更新后执行一个find()来获取文档。返回发布的正文可能不是一个好的做法,因为它不应该被信任,因为它来自用户,而且它不会考虑返回允许部分更新的完整文档。

2)将来自req.body的传入数据过滤到您所期望的字段绝对是一个很好的实践,特别是因为您将它们直接传递到模型的更新函数中。去掉_id似乎是合适的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15994083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档