2012-04-30 11 views
1
다음과 같은 기준을 충족하는 모든 쿼리를 반환하는 MongoDB의 올바른 구문은 무엇

: 나는 명령 아래 사용하여 시도하지만 빈모 운영자하여 MongoDB에서

db.data.find({ a : { $mod : [ 4, { $gte : 2 } ] } }); 

또 다른 옵션을 반환

a % 4 >= 2 

다음과 같이 자바 스크립트 표현식을 사용합니다.

db.data.find("this.a % 4 >= 2"); 

자바 스크립트 표현식이 작동하고 반환합니다. 예상되는 문서이지만 PyMongo에서는 작동하지 않습니다.

MongoDB를 버전 2.0.4
PyMongo 버전 2.1.1

+0

a % 4> = 3은 그나마 더 효율적인 % 4 == 3과 같습니다. % 3이> 3이 될 수 없습니다. – Corbin

+0

좋음, 좋지 않은 예, 위의 예제를 % 4> = 2로 수정했습니다. – carbotex

+0

그냥 골동품 : 무엇을 쿼리에 사용합니까? 개인적으로 $ mod는 필요하지 않습니다. 따라서 나는 그것이 무엇을 위해 사용되는지 알고 싶다. – rwitzel

답변

1

저는 현재 간단한 쿼리만으로이 작업을 수행 할 수 있다고 생각하지 않습니다. 대신 자바 스크립트 버전을 사용해야합니다. 생성 된 커서에 where 메서드를 사용하여 PyMongo로이 작업을 수행 할 수 있어야합니다. 예 : F :

cursor = collection.find().where("this.a % 4 >= 2"); 
+0

장래에 MongoDB가 비트 연산 지원을 제공하기를 희망하지만,이 작업은 잠시 할 것입니다. 감사합니다. – carbotex

+0

MongoDB는 수정을위한 간단한 비트 연산자를 지원합니다. 검색어의 경우 답변은 https://jira.mongodb.org/browse/SERVER-3518입니다. – Derick

3

가 PyMongo의 경우 표현식을 사용하려면 다음을 시도해보십시오 $mod 운영자는 단순히 같은 조건문 작동하지 않습니다 { $where: "this.a % 4 >= 2" }

.

  1. 사용 a를 어디에 표현 이와 같은 표현
  2. 사용 : 당신은 세 가지 선택이 자신의 분야에서

    db.data.find({ $or : [ { a : { $mod : [ 4, 2 ] } }, 
             { a : { $mod : [ 4, 3 ] } } 
             ] }); 
    
    db.data.find({ $and : [ { a : { $not : { $mod : [ 4, 0 ] } } }, 
             { a : { $not : { $mod : [ 4, 1 ] } } } 
             ] }); 
    
  3. 스토어 a % 4.

+0

자바 스크립트 평가가 포함되어 있지 않기 때문에 숫자가 작은 경우 위의 '$ 또는'로 대답하는 것이 가장 좋습니다. – Tobia