演示
cart.gif
描述場(chǎng)景
更新購物車數(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只用了一步钳恕,更加簡潔,適用于更新的字段少且非常明確的場(chǎng)景
第二種先findOne再對(duì)entity進(jìn)行save操作埂奈,利用了underscore對(duì)象復(fù)制,面向整個(gè)對(duì)象操作更加靈活套啤,適用于字段多且不確定的場(chǎng)景
結(jié)論
需求總是在變的英支,所以我一般采用第二種。
praise
mp