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 相关文章推荐
让插入到 innerHTML 中的 script 跑起来的实现代码
Jul 01 Javascript
JS子父窗口互相操作取值赋值的方法介绍
May 11 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
JS动态计算移动端rem的解决方案
Oct 14 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
Mar 04 Javascript
video.js使用改变ui过程
Mar 05 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 Javascript
vue中render函数的使用详解
Oct 12 Javascript
微信小程序实现的动态设置导航栏标题功能示例
Jan 31 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实现读取和编写XML DOM代码
2010/04/07 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
javascript分页代码(当前页码居中)
2012/09/20 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
Python实现的数据结构与算法之队列详解
2015/04/22 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python 模拟登陆github的示例
2020/12/04 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
C#笔试题
2015/07/14 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
《西门豹》教学反思
2016/02/23 职场文书
导游词书写之黄山
2019/08/06 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android