2016-10-02 34 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 –

相關問題