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 的Document属性和方法集合
Jan 25 Javascript
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
js图片轮播特效代码分享
Sep 07 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
js返回顶部实例分享
Dec 21 Javascript
javascript构造函数以及原型对象的理解
Jan 13 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
详解bootstrap导航栏.nav与.navbar区别
Nov 23 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
vue-router beforeEach跳转路由验证用户登录状态
Dec 26 Javascript
js回到页面指定位置的三种方式
Dec 17 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
Javascript图像处理思路及实现代码
2012/12/25 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
three.js实现圆柱体
2018/12/30 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
python实发邮件实例详解
2019/11/11 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
知识竞赛主持词
2014/03/26 职场文书
5s推行计划书
2014/05/06 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
老干部工作汇报材料
2014/10/28 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
2014年客房部工作总结
2014/11/22 职场文书
长城导游词
2015/01/30 职场文书
无房证明样本
2015/06/17 职场文书
新郎新娘致辞
2015/07/31 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电