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

Node.js和使用Mongoose的MongoDB。使用findByIdAndUpdate vs Manual,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,使用findByIdAndUpdate并手动执行有什么缺点吗。我注意到findByIdAndUpdate删除了我的mongo连接,并读到您应该尝试保持连接打开,只有在您关闭应用程序时才关闭连接。是这样的吗?如果是这样的话,是否有一个我没有看到的用于findByIdAndUpdate的配置设置可以保持连接 updateItemById: function(id, updateObj, options, callback){ //OPTION 1 Badge.findById(id,

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

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

选择1:

  • 按ID获取对象
  • 将其转换为JavaScript对象
  • 更新客户端中的对象
  • 发送回数据库
  • 计算并保存更改
  • 寄回去
  • 转换为JavaScript对象
选择2:

  • 在数据库中查找文档
  • 作为原子操作计算并应用更改
  • 发回对象
  • 转换为JavaScript对象
如您所见,第二个选项确实需要更少的步骤,因此应该更快


好处:代码可读性更强。

我选择了选项2。不管出于什么原因,我认为我的关系正在结束,但事实似乎并非如此。谢谢你的意见。