使用Mongoose的Node.js和MongoDB。使用findByIdAndUpdate vs Manual

时间:2013-05-10 14:49:53

标签: node.js mongodb mongoose

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

1 个答案:

答案 0 :(得分:1)

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

使用选项1:

  • 按ID
  • 获取对象
  • 将其转换为JavaScript对象
  • 更新客户端中的对象
  • 发送回DB
  • 计算并保存更改
  • 发送回来
  • 转换为JavaScript对象

使用选项2:

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

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

奖励:代码更具可读性。