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 相关文章推荐
网站页面自动跳转实现方法PHP、JSP(下)
Aug 01 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
jQuery实现查找链接文字替换属性的方法
Jun 27 Javascript
详解jQuery的Cookie插件
Nov 23 Javascript
js中作用域的实例解析
Mar 16 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
vue实现循环切换动画
Oct 17 Javascript
vue-cli 首屏加载优化问题
Nov 06 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
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
Python列表生成器的循环技巧分享
2015/03/06 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python实现汽车管理系统
2018/11/30 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
python实现快递价格查询系统
2020/03/03 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Python作用域与名字空间原理详解
2020/03/21 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
小学教师岗位职责
2013/11/25 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
家长会演讲稿
2014/04/26 职场文书
工商干部先进事迹
2014/05/14 职场文书
关于颐和园的导游词
2015/01/30 职场文书
材料员岗位职责范本
2015/04/11 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
推广普通话主题班会
2015/08/17 职场文书
大队委员竞选稿
2015/11/20 职场文书
Hive HQL支持2种查询语句风格
2022/06/25 数据库