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 - 如何引入js代码
Mar 09 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
jQuery的.live()和.die() 使用介绍
Sep 10 Javascript
MooBox 基于Mootools的对话框插件
Jan 20 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
Jan 15 Javascript
jQuery子窗体取得父窗体元素的方法
May 11 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
两种方法解决javascript url post 特殊字符转义 + & #
Apr 13 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
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
提问的智慧(2)
2006/10/09 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
vue组件之Alert的实现代码
2017/10/17 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
Python continue继续循环用法总结
2018/06/10 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
应届大学生自荐信格式
2013/09/21 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
市场安全管理制度
2014/01/26 职场文书
国企干部对照检查材料
2014/08/22 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
golang中的空slice案例
2021/04/27 Golang
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers