2013-05-12 2 views
0

와 기능에 의해 을 doument를 업데이트 자바 나는 다음과 같은 문서 구조가 있습니다MongoDB를은 자바와 함께, 내가 MongoDB를 사용하고 필드

{ 
    _id : ... 
    total_items : 34 
    avarage_cost : 54 
} 

지금 나는 그것의 비용 항목을 가지고 있고, 내가 업데이트 할을 내 컬렉션은 총계가 1 씩 증가하고 평균 소비 비용이 옳을 것입니다. 그렇게하는 가장 좋은 방법은 무엇입니까?

int cost = ... ; 

BasicDBObject updatequery = new BasicDBObject(); 
updatequery.put("$inc", BasicDBObjectBuilder.start().add("total_items ", 1).get());  
updatequery.put("$function", "function(){this.avarage_cost = ((this.total_items-1)*this.avarage_cost + "+cost+"/)/this.total_items;}"); 

이 좋은/작업 솔루션입니다 :

는이 같은 일을 생각? 그렇게하는 가장 좋은 방법은 무엇입니까?

답변

1

지금은 업데이트 쿼리에서 자바 스크립트 코드를 실행할 수 없습니다. Jira에는 공개 문제가 있습니다. 문제 here을 확인하십시오. 다음과 같이

는이 문제를 해결할 수 :

  1. 는 현재 객체를 가져옵니다.
  2. null 인 경우 average_cost & total_items를 계산하고 DB에 삽입하십시오.
  3. null이 아닌 경우 현재 total_items를 & average_cost 필드로 가져옵니다.
  4. 새로운 total_items을 계산합니다. & average_cost 값.
  5. $set 쿼리 매개 변수를 사용하여 해당 필드를 업데이트하십시오.
+0

이렇게하는 유일한 방법은 무엇입니까? 나는 그 현재의 물건을 얻는 것을 피하고 싶다 ... –