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嵌套函数及闭包
Nov 09 Javascript
Jquery Ajax请求代码(2)
Jan 07 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
不使用浏览器运行javascript代码的方法
Jul 24 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
基于JavaScript实现熔岩灯效果导航菜单
Jan 04 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
webpack打包单页面如何引用的js
Jun 07 Javascript
js通过Date对象实现倒计时动画效果
Oct 27 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
详解JavaScript中精度失准问题及解决方法
Feb 04 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
全国中波电台频率表
2020/03/11 无线电
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
用python写测试数据文件过程解析
2019/09/25 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
java程序员面试交流
2012/11/29 面试题
2014的自我评价
2014/01/13 职场文书
新学期开学寄语
2014/01/18 职场文书
化工工艺设计求职信
2014/06/25 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
营销计划书
2015/01/17 职场文书
python - asyncio异步编程
2021/04/06 Python
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
关于Vue中的options选项
2022/03/22 Vue.js