【发布时间】:2019-04-24 13:43:05
【问题描述】:
我有一个电影评论网站。我的 mongo 数据库中有两个集合,一个用于我的电影评论,另一个用于用户提交的评论。
每当用户提交自己的评论时,我都想在我的评论集合中增加变量 userReviewCount。
我正在使用 mongoose 并在 javascript 中运行所有内容:
function saveUserReview(review) {
collections.ReviewModel.findOne(
{ 'filmId': review._filmId.toNumber() },
function(err, result) {
if (err) throw err;
currentCount = result.userReviewCount;
currentCount++;
});
collections.ReviewModel.update(
{ 'filmId': review._filmId.toNumber() },
{ $set: { "userReviewCount": currentCount } },
function(err, res) {
if (err) throw err;
console.log("Result of update:" + res);
});
因此,每当用户提交评论时,都会调用此函数。首先,它使用 findOne 通过其 Id 查找我的评论,并获取 userReviewCount 的当前值。然后,它将 this 增加 1,并将其添加回集合中。
但非常奇怪的是,$set 似乎只在我每隔一次调用该函数时才起作用。我第一次调用它时,变量 userReviewCount 保持在 0,第二次调用它变为 1,第三次保持在 1,第四次变为 2,依此类推。我无法理解为什么它会这样运行。为了调试,我将 res 输出到控制台,但结果始终是“更新结果:[object Object]”,这没有给我任何信息。
有没有人知道如何调试它?我已经想到了一切。
【问题讨论】:
-
不要将查找和更新分开,只有一个方法可以做到这一点。还有
$inc以原子方式递增。更不用说使用JSON.stringify 来避免[object Object]的事情了。 -
感谢我已更新为使用 $inc!
标签: javascript mongodb mongoose