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


Posted in Javascript onDecember 19, 2017

前言

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

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

演示

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

描述场景

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

业务逻辑

查询到当前用户的购物车对象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对象复制,面向整个对象操作更加灵活,适用于字段多且不确定的场景

结论

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

总结

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

Javascript 相关文章推荐
Javascript 事件流和事件绑定
Jul 16 Javascript
YUI的Tab切换实现代码
Apr 11 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
Oct 16 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
jquery中ajax跨域方法实例分析
Dec 18 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
浅析Vue项目中使用keep-Alive步骤
Jul 27 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 Javascript
js 数组当前行添加数据方法详解
Jul 28 Javascript
vue中使用腾讯云Im的示例
Oct 23 Javascript
jquery中done和then的区别(详解)
Dec 19 #jQuery
JavaScript实现AOP详解(面向切面编程,装饰者模式)
Dec 19 #Javascript
利用nginx + node在阿里云部署https的步骤详解
Dec 19 #Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 #Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 #Javascript
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 #Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 #Javascript
You might like
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
jquery统计复选框选中示例
2013/11/05 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
python数据挖掘需要学的内容
2019/06/23 Python
Python图片的横坐标汉字实例
2019/12/04 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
给领导的致歉信范文
2014/01/13 职场文书
基层干部十八大感言
2014/01/19 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
《掌声》教学反思
2014/02/23 职场文书
民间个人借款协议书
2014/09/30 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技