2013-02-13 3 views
0

질문이 있습니다. 두 필드의 나누기가 어떤 값보다 크거나 같은지 비교해야합니다.

{ 
    "$where": "this.total/this.limit > 0.6" 
} 

그러나 문서는 자바 스크립트 함수를 실행하고 인덱스를 잃게됩니다 때문에 $의 사용이 곳, 성능 좋은 아니라고 말한다 : 그래서 내가 발견 한 솔루션입니다.

누구에게 더 좋은 해결책이 있습니까, 어디서 $를 사용하지 않습니까?

감사합니다.

답변

2

당신은 분할 (http://docs.mongodb.org/manual/reference/aggregation/#_S_divide)를 사용하여 여기에 통합 프레임 워크로 이동할 수 :

db.col.aggregate([ 
    {$match: {_id: whatever_or_whatever_clause_you_want}}, 
    {$project: { 
     // Your document fields 
     divided_limit: {$divide: ['$total', '$limit']} 
    }}, 
    {$match: {divided_limit: {$gt: 0.6}}} 
]); 

참고 : 통합 프레임 워크 2.1

이후 새로운하지만 워드 프로세서를 사용하는 것을 말한다을 $는 성능에 좋지 않습니다. 자바 스크립트 함수를 실행하고 색인을 잃어 버릴 것입니다.

색인을 사용할 수 없습니다. 어쨌든 이것을 위해 수학 함수에 대한 인덱스를 사용할 방법이 없습니다. 핵심은 JS 엔진이 일반 쿼리보다 최대 16 배 느려 집계 프레임 워크가 더 빨라야한다는 것입니다. 뿐만 아니라 JS 잠금은 모든 쿼리에 대해 전역 적입니다.

물론 가장 빠른 방법은 응용 프로그램에서 레코드를 수정할 때이 합계를 다른 필드에 사전 집계하는 것입니다. 그런 다음이 일반 쿼리 만 필요하지는 않습니다.

+0

고맙습니다.이 솔루션으로 제 문제가 해결되었습니다. 건배! – Brayan