2011-11-14 17 views
7

Mam podstawowe zapytanie geoprzestrzenne działające dobrze w MongoDB. Wydaje się, że powinno być łatwo zastosować $, aby nie uzyskać uzupełnienia ... ale to nie działa dla mnie. Czy to prosty błąd użytkownika? A może MongoDB nie traktuje tego zapytania koncepcyjnie? Nie mogłem znaleźć takiego ograniczenia w documentation.

zapytania robocza (poprawnie wyszukuje 2 miastach ciągu 10 mil od centrum):

db.customers.find({ "location" : { $within : { $center : [[-117.15,32.72],0.15] } } }) 

nieudane zapytanie dopełniacza (pożądany wynikiem jest 1 miasto, które nie jest w odległości 10 mil):

db.customers.find({ "location" : { $not : { $within : { $center : [[-117.15,32.72],0.15] } } } }) 
error: { 
    "$err" : "missing geo field (location) in : {location: { $not: { $within: { $center: [ [ -117.15, 32.72 ], 0.15 ] } } } }", 
    "code" : 13042 
} 

dla każdego, kto chce skopiować/wkleić kwerendę, aby zobaczyć ten błąd, oto drobny bit danych próbki:

db.customers.ensureIndex({ "location" : "2d" }) 
db.customers.save({"city":"La Mesa","state":"CA","location":[ -117.02,32.76 ]}) 
db.customers.save({"city":"Chula Vista","state":"CA","location":[ -117.08,32.63 ]}) 
db.customers.save({"city":"Mexico City","state":"Mexico","location":[-99.133244,19.4326]}) 

(Używam MongoDB 1.8.2, jeśli to ma znaczenie).

+2

To jest trudne ... Polecam również wiadomość na grupie google mongodb-user ... – PierrOz

+0

Tak, polecam również ... to miłe pytanie .. – RameshVel

+0

Zapytanie takie jak to nie jest możliwe, ale jest to znane żądanie rozszerzenia. Na przyszłość te wątki w Grupie dyskusyjnej MongoDB Google omawiają problem. [geo zapytania przy użyciu $ i] [1] [geo zapytań] [2] [1] [2 http://groups.google.com/group/mongodb-user/browse_thread/thread/4417b0f9f0b3de12 ]: http://groups.google.com/group/mongodb-user/browse_thread/thread/65a7fd77a2ee4306 Pomoc! Nie mogę wymyślić, jak sformatować te linki. – mdahlman

Odpowiedz

5

Myślę, że to niemożliwe. O ile mi wiadomo, zapytania o lokalizację dadzą Ci specjalny kursor, który może używać zapytań o lokalizację jako parametrów (takich jak $within). .

v 2.0.1 daje bardziej opisowy komunikat o błędzie: error: { "$err" : "geo field only has 1 element", "code" : 13068 }

Problem z indeksowaniem jest to, że w ogóle negacja jest EVIL. Większość indeksów nie radzi sobie dobrze po ich odwróceniu, więc nawet jeśli zapytanie zadziałało, prawdopodobnie nie jest pożądane, ponieważ prawdopodobnie będzie musiało wykonać skanowanie tabeli.

Nie jestem do końca pewny, wiadomość dla grupy dyskusyjnej to prawdopodobnie dobry pomysł.

+3

Tak, pomoc dla grupy dyskusyjnej. Inni mają podobne żądania. Wsparcie dla $ i i $ all są być może bardziej przydatne (mniej EVIL), ale też nie są obsługiwane. Wymagane jest ulepszenie: https://jira.mongodb.org/browse/SERVER-3984 – mdahlman

+0

I like mongodb schedule Data: 31 grudnia 2012 UTC – user956584

+0

Czy to nadal nie jest możliwe? Używam mongodb 2.6.4 ... –

Powiązane problemy