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

Posted

技术标签:

【中文标题】如何使用计算值批量更新 MongoDB 中服务器上的文档?【英文标题】:How to batch update documents on the server in MongoDB using calculated values? 【发布时间】:2011-08-26 13:29:17 【问题描述】:

我有一些东西,每件东西都有一些用户评论,每条评论都有一个数字 (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);
);

但这是一个不能令人满意的客户端解决方案......它不一定是 map/reduce,但可能这就是要走的路吗?

【问题讨论】:

【参考方案1】:

使用 db.eval(your_JS_code_here)。

【讨论】:

以上是关于如何使用计算值批量更新 MongoDB 中服务器上的文档?的主要内容,如果未能解决你的问题,请参考以下文章

C# mongodb driver 2.0 - 如何在批量操作中更新插入?

MongoDB批量更新不同查询条件的数据

如何批量更新 MongoDB 字符串数组以用连字符替换空格?

PLSQL中批量更新数据

mongodb数据库批量插入海量数据时为啥有少部分数据丢失

在 C# 中批量更新 mongoDB 文档