mongoose更新对象的两种方法示例比较
前言
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具
那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:http://www.jb51.net/article/80296.htm
演示
描述场景
更新购物车数量与勾选状态
业务逻辑
查询到当前用户的购物车对象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对象复制,面向整个对象操作更加灵活,适用于字段多且不确定的场景
结论
需求总是在变的,所以我一般采用第二种。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
利用Mongoose让JSON数据直接插入或更新到MongoDB
前言 Nodejs基于Javascript,MongoDB脚步同样也是基于Javascript.而且他们的数据存储格式都是JSON,这就是为什么要把他们放在一起的原因了.如果程序前后端能直接处理JSON,我想数据处理过程又可以极大的减化了,代码量又将低少1/5.多么的兴奋啊!让我们来动手验证一下想法吧. 本文重点介绍web前端通过JQuery发起POST提交JSON数据,通过Mongoose直接插入或更新到MongoDB. 工程目录沿用nodejs-demo,增加/mongoose路径及对应文件
-
Mongoose学习全面理解(推荐)
一.创建schemas 创建schemas的方式: var userSchema = new mongoose.Schema({ name: String, email: String, createdOn: Date }); schemas中的数据类型有以下几种: String Number Date Boolean Buffer ObjectId Mixed Array 特别需要说明一下ObjectId类型和Mixed类型以及Array类型,在schemas中声明这几种类型的方式如下: //
-
mongoose更新对象的两种方法示例比较
前言 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:http://www.jb51.net/article/80296.htm 演示 描述场景 更新购物车数量与勾选状态 业务逻辑 查询到当前用户的购物车对象Cart,更新前端传递过来的quantity与selected字段 方法一 var _ = require('underscore'); Cart.f
-
Android 在子线程中更新UI的几种方法示例
本文介绍了Android 在子线程中更新UI的几种方法示例,分享给大家,具体如下: 方式一:Handler和Message ① 实例化一个Handler并重写handlerMessage()方法 private Handler handler = newHandler() { public void handleMessage(Message msg) { // 处理消息 super.handleMessage(msg); switch (msg.what) { case 1: button1.
-
Python更新数据库脚本两种方法及对比介绍
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQLdb #主机名 HOST = '127.0.0.1' #用户名 USER = "root" #密码 PASSWD = "123456" #数据库名 DB = "db_name" # 打开数据库连接 db=MySQLdb.connect(HOST,U
-
Python中的is和==比较两个对象的两种方法
Python中的is和==比较两个对象的两种方法 在Python中有两种方式比较两个对象是否相等,分别是is和==,两者之间是不同的 ==比较的是值(如同java中的equals方法) is比较的是引用(可以看作比较内存地址, 类似于java中的==) 对于: >>> n = 1 >>> n is 1 True >>> b = '1' >>> b is 1 False >>> n == b False 由于1和'1'
-
Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍
Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写
-
Quartz与Spring集成的两种方法示例
目录 Quartz与Spring集成有2种方式:1.MethodInvokeJobDetailFactoryBean2.JobDetailBean下面分别介绍这两种方式.1.MethodInvokeJobDetailFactoryBean1)创建一个Job类,此类不需要实现任何接口,不需要继承任何类 public class MyJobTest { public void execute(){ System.out.println("正在执行quartz任务的一个方法..."); }}
-
Java实现对象按照其属性排序的两种方法示例
本文实例讲述了Java实现对象按照其属性排序的两种方法.分享给大家供大家参考,具体如下: 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序的对象类实现Comparable<>接口. 首先,创建学生类,我们将根据学生成绩对学生进行排序: /** * 学生类 */ class Student implements Comparable<Student>{ String name; int age; int score; public Student(Stri
-
MySQL过滤重复数据的两种方法示例
目录 方法1:加关键字 DISTINCT 方法2:用GROUP By 分组 最后 方法1:加关键字 DISTINCT 在mysql中,可以利用“SELECT”语句和“DISTINCT”关键字来进行去重查询,过滤掉重复的数据,语法“SELECT DISTINCT 字段名 FROM 数据表名;”. DISTINCT 关键字的语法格式为: SELECT DISTINCT <字段名> FROM <表名>; 其中,“字段名”为需要消除重复记录的字段名称,多个字段时用逗号隔开. 示例 -- 示
-
使用POST方式弹出窗口的两种方法示例介绍
最近在做一个功能需要弹窗,但是不能用get方式,因为get方式对url的长度有限制,所以必须用post,总结了两个方法 1. 复制代码 代码如下: var $form1=$("<form action='"+url+"' id='f' name='f' method='post'></form>"); $form1.append($("<input type='hidden' name='"+i+"' va
-
Python实现删除排序数组中重复项的两种方法示例
本文实例讲述了Python实现删除排序数组中重复项的两种方法.分享给大家供大家参考,具体如下: 对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度 注意:不能为新数组申请额外的空间,只允许申请O(1)的额外空间修改输入数组 Example 1: Given nums = [1,1,2], Your function should return length = 2, with the first two elements of nums being 1
随机推荐
- 基于php流程控制语句和循环控制语句(讲解)
- C#读写txt文件的2种方法
- Vuex之理解Mutations的用法实例
- Spring Boot 与 mybatis配置方法
- IOS 应用内显示 AppStore 某个应用的详情
- 零基础写python爬虫之使用Scrapy框架编写爬虫
- Swift教程之基础数据类型详解
- ThinkPHP关联模型操作实例分析
- HDOJ 1443 约瑟夫环的最新应用分析详解
- c++中new的三种用法详细解析
- Mysql更换MyISAM存储引擎为Innodb的操作记录总结
- CSS渐变统计柱形图
- nginx搭建tcp代理服务器
- SQL Server简单实现数据的日报和月报功能
- java数据库操作类演示实例分享(java连接数据库)
- python批量替换页眉页脚实例代码
- java文件的重命名与移动操作实例代码
- webpack-url-loader 解决项目中图片打包路径问题
- 整理Linux中字符串的相关操作技巧
- 利用python如何处理nc数据详解