2016-10-02 109 views
2

我想在用户点击某个按钮时增加upvotes,并在数组内存储他的stormpath用户ID(req.user.href)。mongoose findByIdAndUpdate只更新文档中的一个字段

TRY 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不会递增。

TRY 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阵列不更新。

TRY 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);  
    }) 

结果: Nothing发生

什么,我想做的事:更新Upvoters阵列和增量upvotes由1

回答

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); 
}) 
+0

OMG。非常感谢! :-) 我花了2个小时试图解决这个问题。 :-( –

+0

)正确的语法是:'Model.findByIdAndUpdate(id,[update],[options],[callback])'。参见http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate –

相关问题