2011-05-16 2 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)을 사용하십시오.

관련 문제