2011-05-16 48 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)。

相關問題