mongoose更新对象的两种方法示例比较

 更新时间:2017年12月19日 09:58:48   作者:黄秀杰  
最近在使用mongoose的时候发现了一个之前一直没注意的知识点,下面这篇文章主要给大家介绍了关于mongoose更新对象的两种方法,通过示例代码将两种方法进行详细的对比,以给大家更好的参考学习,需要的朋友可以参考下。

前言

Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具

那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:https://www.jb51.net/article/80296.htm

演示

描述场景

更新购物车数量与勾选状态

业务逻辑

查询到当前用户的购物车对象Cart,更新前端传递过来的quantity与selected字段

方法一

var _ = require('underscore');
Cart.findOneAndUpdate({
 _id: req.body.cart._id,
 user: user
 }, _.pick(req.body.cart, 'quantity', 'selected'), {
 new: true
 },
 function(err, updatedCart) {
 res.send(
  utils.json({
  data: updatedCart
  })
 );
 }
);

注:_.pick相当于

 {
 quantity: req.body.cart.quantity,
 selected: req.body.cart.selected
 }

方法二

var _ = require('underscore');
Cart.findOne({
 _id: req.body.cart._id,
 user: user
 }, function(err, cart) {
 if (err) {
  console.log(err);
 }
 // 复制对象
 _.extend(cart, req.body.cart);
 cart.save(function(err, updatedCart) {
  res.send(
  utils.json({
   data: updatedCart
  })
  );
 });
 }
);

对比

第一种代码使用findOneAndUpdate只用了一步,更加简洁,适用于更新的字段少且非常明确的场景

第二种先findOne再对entity进行save操作,利用了underscore对象复制,面向整个对象操作更加灵活,适用于字段多且不确定的场景

结论

需求总是在变的,所以我一般采用第二种。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Node.js中MongoDB更新数据的两种方法

    Node.js中MongoDB更新数据的两种方法

    本文主要介绍了Node.js中MongoDB更新数据的两种方法,主要包括使用原生的 MongoDB 驱动程序或者使用 Mongoose 来更新 MongoDB 数据,
    2023-12-12
  • nodejs使用express创建一个简单web应用

    nodejs使用express创建一个简单web应用

    这篇文章主要介绍了nodejs使用express创建一个简单web应用的相关资料,需要的朋友可以参考下
    2017-03-03
  • Node.js卸载与重装及zip与msi安装详解

    Node.js卸载与重装及zip与msi安装详解

    Node.js是一个JavaScript运行环境,可以使JavaScript这类脚本语言编写出来的代码运行速度获得极大提升,下面这篇文章主要给大家介绍了关于Node.js卸载与重装及zip与msi安装的相关资料,需要的朋友可以参考下
    2023-01-01
  • 详解nodejs异步I/O和事件循环

    详解nodejs异步I/O和事件循环

    本篇文章主要介绍了nodejs异步I/O和事件循环,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 在Node.js中实现文件复制的方法和实例

    在Node.js中实现文件复制的方法和实例

    这篇文章主要介绍了在Node.js中实现文件复制的方法和实例,使用FS模块实现,需要的朋友可以参考下
    2014-06-06
  • 详解nodeJs文件系统(fs)与流(stream)

    详解nodeJs文件系统(fs)与流(stream)

    这篇文章主要介绍了详解nodeJs文件系统(fs)与流(stream),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • NODE.JS跨域问题的完美解决方案

    NODE.JS跨域问题的完美解决方案

    这篇文章主要介绍了NODE.JS跨域问题的完美解决方案,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • node中的session的具体使用

    node中的session的具体使用

    这篇文章主要介绍了node中的session的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • nvm报错Now using node v版本号(64-bit)图文解决方法

    nvm报错Now using node v版本号(64-bit)图文解决方法

    这篇文章主要给大家介绍了关于nvm报错Now using node v版本号(64-bit)的解决方法,文中将解决的办法介绍的非常详细,对遇到这个问题的朋友具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Node.js Addons翻译(C/C++扩展)

    Node.js Addons翻译(C/C++扩展)

    这篇文章主要介绍了Node.js Addons翻译(C/C++扩展) 的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论