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代码混淆综合解决方案-Javascript在线混淆器
Dec 18 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
Jan 09 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
详解vuex的简单使用
Mar 12 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
Jul 21 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
详解YII关联查询
2016/01/10 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
团日活动总结报告
2014/06/25 职场文书
党员批评与自我批评
2014/10/15 职场文书
公司感谢信范文
2015/01/22 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
一文弄懂MySQL索引创建原则
2022/02/28 MySQL