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 相关文章推荐
判断页面是关闭还是刷新的js代码
Jan 28 Javascript
用javascript自动显示最后更新时间
Mar 15 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
JavaScript中Function详解
Feb 27 Javascript
jQuery制作简洁的图片轮播效果
Apr 03 Javascript
jQuery实现的跨容器无缝拖动效果代码
Jun 21 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
Aug 30 Javascript
js倒计时小实例(多次定时)
Dec 08 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
详解VUE单页应用骨架屏方案
Jan 17 Javascript
Vue从TodoList中学父子组件通信
Feb 05 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打印输出函数汇总
2016/08/28 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
PHP实现验证码校验功能
2017/11/16 PHP
一个javascript图片阅览组件
2010/11/09 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
javascript arguments使用示例
2014/12/16 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python创建文件备份的脚本
2018/09/11 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
Django实现内容缓存实例方法
2020/06/30 Python
python中数字是否为可变类型
2020/07/08 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
八年级生物教学反思
2014/01/22 职场文书
五心教育心得体会
2014/09/04 职场文书
2015年少先队活动总结
2015/03/25 职场文书
终止劳动合同通知书
2015/04/16 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
python如何做代码性能分析
2021/04/26 Python
Mysql 用户权限管理实现
2021/05/25 MySQL