mongoose更新對(duì)象的兩種方法示例比較
前言
Mongoose是在node.js異步環(huán)境下對(duì)mongodb進(jìn)行便捷操作的對(duì)象模型工具
那么要使用它,首先你得裝上node.js和mongodb,關(guān)于mongodb的安裝和操作介紹可以參考:http://www.dhdzp.com/article/80296.htm
演示

描述場景
更新購物車數(shù)量與勾選狀態(tài)
業(yè)務(wù)邏輯
查詢到當(dāng)前用戶的購物車對(duì)象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相當(dāng)于
{
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);
}
// 復(fù)制對(duì)象
_.extend(cart, req.body.cart);
cart.save(function(err, updatedCart) {
res.send(
utils.json({
data: updatedCart
})
);
});
}
);
對(duì)比
第一種代碼使用findOneAndUpdate只用了一步,更加簡潔,適用于更新的字段少且非常明確的場景
第二種先findOne再對(duì)entity進(jìn)行save操作,利用了underscore對(duì)象復(fù)制,面向整個(gè)對(duì)象操作更加靈活,適用于字段多且不確定的場景
結(jié)論
需求總是在變的,所以我一般采用第二種。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子
其實(shí)以前就寫過如何使用React-router和Webpack快速構(gòu)建一個(gè)react程序。后來發(fā)現(xiàn)版本太老,于是乎最近又重新組織了下結(jié)構(gòu),使用最近發(fā)布的yarn作為包管理工具,介紹下基本安裝步驟,有需要的朋友們下面來一起看看吧。2016-10-10
Nodejs進(jìn)階:express+session實(shí)現(xiàn)簡易登錄身份認(rèn)證
本篇文章主要介紹了Nodejs進(jìn)階:express+session實(shí)現(xiàn)簡易身份認(rèn)證示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
node thread.sleep實(shí)現(xiàn)示例
這篇文章主要介紹了node thread.sleep實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
windows實(shí)現(xiàn)npm和cnpm安裝步驟
這篇文章主要介紹了windows實(shí)現(xiàn)npm和cnpm安裝步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

