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 相关文章推荐
QQ登录简单实现代码
Mar 09 Javascript
又一个图片自动缩小的JS代码
Mar 10 Javascript
兼容FireFox 的 js 日历 支持时间的获取
Mar 04 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
Aug 12 Javascript
JavaScript中的正则表达式简明总结
Apr 04 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
JavaScript严格模式下关于this的几种指向详解
Jul 12 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
jQuery操作动画完整实例分析
Jan 10 jQuery
原生js实现的金山打字小游戏(实例代码详解)
Mar 16 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
php微信开发自定义菜单
2016/08/27 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
jquery添加div实现消息聊天框
2020/02/08 jQuery
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
Python3+Appium安装使用教程
2019/07/05 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
先进班集体事迹材料
2014/12/25 职场文书
联欢会开场白
2015/06/01 职场文书
化验室安全管理制度
2015/08/06 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
Python正则表达式中flags参数的实例详解
2022/04/01 Python