【问题标题】:Node.js and MongoDB using Mongoose. Using findByIdAndUpdate vs Manual使用 Mongoose 的 Node.js 和 MongoDB。使用 findByIdAndUpdate 与手动
【发布时间】:2013-05-05 07:13:50
【问题描述】:

使用 findByIdAndUpdate 并手动执行是否有任何缺点。我注意到 findByIdAndUpdate 断开了我的 mongo 连接,并且读到您应该尝试保持连接打开,只有在您关闭应用程序时才关闭。是这样吗?如果是这样,是否有一个我没有看到 findByIdAndUpdate 的配置设置来保持连接?

updateItemById: function(id, updateObj, options, callback){
  //OPTION 1
      Badge.findById(id, null , function(err, doc){
    doc.update(updateObj, function(err, numberAffected, raw){
    if (err) return handleError(err);
         Badge.findById(id, null , function(err, doc){
                 callback(doc);
             });
        });
   });
  //OPTION 2
  Badge.findByIdAndUpdate(id, updateObj, options, function(err, data){
        callback(doc);
  });
 }

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    findByIdAndUpdate 应该更快(只要驱动程序和猫鼬被正确编程),因为:

    使用选项 1:

    • 按 ID 获取对象
    • 将其转换为 JavaScript 对象
    • 在客户端更新对象
    • 发回 DB
    • 计算并保存更改
    • 寄回
    • 转换成 JavaScript 对象

    使用选项 2:

    • 在数据库中查找文档
    • 以原子操作的形式计算和应用更改
    • 发回对象
    • 转换成 JavaScript 对象

    如您所见,第二个选项确实需要更少的步骤,因此应该更快。

    奖励:代码更具可读性。

    【讨论】:

    • 我选择了选项 2。无论出于何种原因,我认为我的连接正在关闭,但情况似乎并非如此。感谢您的意见。
    猜你喜欢
    • 2018-06-14
    • 2012-02-07
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 2017-05-14
    • 2011-09-22
    • 2014-09-03
    相关资源
    最近更新 更多