最近在使用mongoose的时候发现了一个之前一直没注意的知识点,下面这篇文章主要给大家介绍了关于mongoose更新对象的两种方法,通过示例代码将两种方法进行详细的对比,以给大家更好的参考学习,需要的朋友可以参考下。
前言
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具
那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考://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
}方法二
睿拓智能网站系统-网上商城1.0免费版软件大小:5M运行环境:asp+access本版本是永州睿拓信息专为电子商务入门级用户开发的网上电子商城系统,拥有产品发布,新闻发布,在线下单等全部功能,并且正式商用用户可在线提供多个模板更换,可实现一般网店交易所有功能,是中小企业和个人开展个人独立电子商务商城最佳的选择,以下为详细功能介绍:1.最新产品-提供最新产品发布管理修改,和最新产品订单查看2.推荐产
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对象复制,面向整个对象操作更加灵活,适用于字段多且不确定的场景
结论
需求总是在变的,所以我一般采用第二种。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:









