mongoose findByIdAndUpdate仅更新文档中的一个字段

时间:2016-10-02 14:42:22

标签: node.js mongodb mongoose mongodb-query

当用户点击某个按钮并将其stormpath用户ID(req.user.href)存储在数组中时,我试图增加upvotes。

尝试1:

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数组才能正确更新。 Upvotes不会增加。

尝试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。

1 个答案:

答案 0 :(得分:2)

您需要将$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);
})