2012-04-13 3 views
0

내가 좋아하는 개체가 다음MongoDB를 "가리 키지 [-180, 180)의 간격으로"

{ 
    "_id" : ObjectId("4f7f0d64e4b0db1e18790f10"), 
    "location" : [ 
     0.674081, 
     23.473 
    ], 
    "name" : "Item Name" 
} 

나는 시도하고 위치 필드에서 2D 인덱스를 만들 경우 오류가 발생합니다 :

> db.Place.ensureIndex({location:"2d"}); 
point not in interval of [ -180, 180) 

나는 경계 밖에있는 문서를 찾는 시도했지만이 결과가 반환 : 나는 또한 다음과 같은 쿼리를 시도했습니다

> db.Place.find({"location.0":{"$lte":-180, "$gte":180}}); 
> db.Place.find({"location.1":{"$lte":-180, "$gte":180}}); 

을 확인을 위해 :

> db.Place.find({"location":{"$size":0}}).count(); 
0 
> db.Place.find({"location":{"$size":1}}).count(); 
0 
> db.Place.find({"location":{"$size":2}}).count(); 
363485 
> db.Place.count(); 
363485 

잘못된 문서를 찾으려면 다른 방법을 사용할 수 있습니까?

정보를 얻으려면 32 비트 Linux에서 MongoDB 버전 2.0.2를 사용하고 있습니다. (그렇습니다. 문서는 위치 정보 객체가 double 프리미티브로만 표시되는 Java 문서로 가져 왔습니다.

답변

1

검색어가 적합하지 않습니다.

db.Place.find({"location": {"$lte":-180 } })

그리고

db.Place.find({"location": {"$gte":180 } })

+0

'및'기본적으로 다음과 같습니까? 그가 MongoDB를 사용하여 단일 질의로 ''또는 ''할 수 있습니까? – Rup

+1

@Rup 당신이 할 수있는'{$ or : {{location : {$ gte : 180}}, {location : {$ lte : -180}}}' –

+0

@EveFreeman : 어떻게이 문제를 해결할 수 있습니까? –

0

내가 유사한 문제로 실행했습니다, 그리고/경도 위도 중 하나가 -180 정확히 동일한 경우 그 ensureIndex 구분을 정확하게 할 수있었습니다 : 당신은 필요 또는 180입니다.이 문제를 해결하려면 해당 사례를 찾아보십시오. 그렇지 않으면 수정 사항이있는 것 같습니다. https://github.com/mongodb/mongo/commit/86b5b89c2785f3f45ad2674f48fe3189c137904c

관련 문제