질문이 있습니다. 두 필드의 나누기가 어떤 값보다 크거나 같은지 비교해야합니다.
{
"$where": "this.total/this.limit > 0.6"
}
그러나 문서는 자바 스크립트 함수를 실행하고 인덱스를 잃게됩니다 때문에 $의 사용이 곳, 성능 좋은 아니라고 말한다 : 그래서 내가 발견 한 솔루션입니다.
누구에게 더 좋은 해결책이 있습니까, 어디서 $를 사용하지 않습니까?
감사합니다.
질문이 있습니다. 두 필드의 나누기가 어떤 값보다 크거나 같은지 비교해야합니다.
{
"$where": "this.total/this.limit > 0.6"
}
그러나 문서는 자바 스크립트 함수를 실행하고 인덱스를 잃게됩니다 때문에 $의 사용이 곳, 성능 좋은 아니라고 말한다 : 그래서 내가 발견 한 솔루션입니다.
누구에게 더 좋은 해결책이 있습니까, 어디서 $를 사용하지 않습니까?
감사합니다.
당신은 분할 (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 잠금은 모든 쿼리에 대해 전역 적입니다.
물론 가장 빠른 방법은 응용 프로그램에서 레코드를 수정할 때이 합계를 다른 필드에 사전 집계하는 것입니다. 그런 다음이 일반 쿼리 만 필요하지는 않습니다.
고맙습니다.이 솔루션으로 제 문제가 해결되었습니다. 건배! – Brayan