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 相关文章推荐
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
Sep 16 Javascript
深入理解es6块级作用域的使用
Mar 28 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
Sep 25 Javascript
vue-cli3自动消除console.log()的调试信息方式
Oct 21 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获取url参数方法总结
2014/11/13 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
介绍一下Java中的static关键字
2012/05/12 面试题
40岁生日感言
2014/02/15 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python