0

使用 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);
  });
 }
4

1 回答 1

1

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

使用选项 1:

  • 通过 ID 获取对象
  • 将其转换为 JavaScript 对象
  • 在客户端更新对象
  • 发回数据库
  • 计算并保存更改
  • 把它退回
  • 转换成 JavaScript 对象

使用选项 2:

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

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

奖励:代码更具可读性。

于 2013-05-10T14:54:42.600 回答