美文网首页
mongoose更新对象的两种方法对比

mongoose更新对象的两种方法对比

作者: 黄秀杰 | 来源:发表于2017-12-14 11:03 被阅读0次

    演示

    cart.gif

    描述场景

    更新购物车数量与勾选状态

    业务逻辑

    查询到当前用户的购物车对象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对象复制,面向整个对象操作更加灵活,适用于字段多且不确定的场景

    结论

    需求总是在变的,所以我一般采用第二种。

    praise mp

    相关文章

      网友评论

          本文标题:mongoose更新对象的两种方法对比

          本文链接:https://www.haomeiwen.com/subject/xdwhwxtx.html