2011-05-16 49 views
3

我收集了一些东西,每个东西都有一些用户评论,每个评论都有一个数字(1-5)评级。我希望定期运行批量作业,根据该作品的用户评论中的个人评分计算每件“事物”的平均评分,然后再以该新评分保存“事情”。我希望在服务器上发生这种情况,而无需下载和上传每个文档。如何使用计算值批量更新MongoDB服务器上的文档?

换句话说,我正在寻找一个解决方案,它将迭代我收藏中的所有东西,总结用户评论的评分,然后将评分总数除以评分计数(从而得到平均值)并存储该平均值在每个文件的财产。在第一

我试着用地图接近这一/减少,是这样的:

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

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

回答

1

使用db.eval(your_JS_code_here)。

相关问题