【问题标题】:mongoose findByIdAndUpdate updating only one field in the document猫鼬 findByIdAndUpdate 只更新文档中的一个字段
【发布时间】:2017-02-10 14:26:55
【问题描述】:

我正在尝试在用户单击某个按钮时增加赞成票,并将他的 Stormpath 用户 ID (req.user.href) 存储在一个数组中。

试一试:

if (newUpvoters = found_post[0].upvoters.indexOf(req.user.href) == -1) {
    Problem.findByIdAndUpdate(found_post[0].id,  
        { $push: { upvoters:  req.user.href }}
        , {$inc: { upvotes : 1 } }, function (err, post) {
                if (err) return next(err);
                res.json(post);
    })
}

结果: 只有 upvoters 数组被正确更新。点赞数不会增加。

尝试 2:

Problem.findByIdAndUpdate(found_post[0].id,  
    {$inc: { upvotes : 1 } }, 
    { $push: { upvoters:  req.user.href }}, function (err, post) {
        if (err) return next(err);
        res.json(post);
})

结果: 只有 Upvotes 会增加,upvoters 数组不会更新。

尝试 3:

Problem.findByIdAndUpdate(found_post[0].id,  
    {$set :
        {$inc: { upvotes : 1 } , 
         $push: { upvoters:  req.user.href }}
    }, function (err, post) {
        if (err) return next(err);
        res.json(post);     
     })

结果:什么都没有发生

我想做什么:更新 Upvoters 数组并将 upvotes 增加 1。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    您需要将 $inc$push 运算符放入同一个对象中:

    Problem.findByIdAndUpdate(found_post[0].id,  
        { $inc: { upvotes : 1 }, 
          $push: { upvoters:  req.user.href }
        }, function (err, post) {
            if (err) return next(err);
            res.json(post);
    })
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2020-06-27
    • 2020-09-06
    • 2021-10-17
    • 2021-12-10
    相关资源
    最近更新 更多