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 attachEvent和addEventListener使用方法
Mar 19 Javascript
javascript控制frame,iframe的src属性代码
Dec 31 Javascript
this和执行上下文实现代码
Jul 01 Javascript
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
如何优雅地在vue中添加权限控制示例详解
Mar 07 Javascript
微信小程序实现类似微信点击语音播放效果
Mar 30 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
Sep 20 Javascript
Javascript实现打鼓效果
Jan 29 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
实用函数5
2007/11/08 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
python的faker库用法
2019/11/28 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
几道Web/Ajax的面试题
2016/11/05 面试题
考试不及格的检讨书
2014/01/22 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
六年级作文之自救
2019/12/19 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers