如何使用计算值在MongoDB中批量更新服务器上的文档



我有一个东西的集合,每个东西都有一些用户评论,每个评论都有一个数字(1-5)评级。我想定期运行一个批处理作业,该作业将根据该事物的用户评论中的单个评分计算每个"事物"的平均评分,然后使用该新评分再次保存该"事物"。我希望这发生在服务器上,而无需下载和上传每个文档。

换句话说,我正在寻找一种解决方案,该

解决方案将迭代我集合中的所有内容,将用户评论中的评级相加,然后将该总和除以评级计数(从而获得平均值)并将该平均值存储在每个文档的属性中。

起初我尝试使用map/reduce来解决这个问题,如下所示:

function () {
    var rating = 0;
    for (var i = 0; i < this.Reviews.length; i++) {
        rating += this.Reviews[i].Rating;
    }
    rating = rating / this.Reviews.length;
    emit(this._id, rating);
}
function(key, values) {
    return null;
}

评级似乎计算正确,但我无法在第一个或第二个函数中调用 db.things.update()。我能够使用生成的表更新评级,如下所示:

db.reduced.find().forEach(function(thing) {
  db.things.update({_id: thing._id},{$set:{Rating:thing.value}});
});

但这是一个不令人满意的客户端解决方案......它不一定是映射/减少,但这可能是要走的路?

use db.eval( your_JS_code_here )。

相关内容

  • 没有找到相关文章

最新更新