2011-11-14 12 views
7

Ho una query geospaziale di base che funziona bene in MongoDB. Sembra che dovrebbe essere facile applicare $ per non ottenere il complemento ... ma non funziona per me. È un errore utente semplice? Oppure MongoDB non può gestire concettualmente questa query? Non sono riuscito a trovare alcuna limitazione di questo tipo nel documentation.

interrogazione di lavoro (trova correttamente le 2 città entro 10 miglia del centro):

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

Tentativo di query complemento (risultato desiderato è il 1 città che non si trova a 10 miglia):

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 
} 

per chiunque che vuole copiare/incollare la query per vedere l'errore, ecco un po 'di dati di esempio:

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]}) 

(Sto usando MongoDB 1.8.2 nel caso che importi)

+2

questo è un problema ... Consiglio anche un messaggio sul gruppo google mongodb-user ... – PierrOz

+0

Sì, lo raccomanderei anche .. è una bella domanda .. – RameshVel

+0

Una query come questa è non è possibile, ma è una richiesta di miglioramento nota. Per riferimento futuro, questi thread sul gruppo Google MongoDB trattano il problema. [Geo Query utilizzando $ e] [1] [Geo Query] [2] [1]: http://groups.google.com/group/mongodb-user/browse_thread/thread/4417b0f9f0b3de12 [2 ]: http://groups.google.com/group/mongodb-user/browse_thread/thread/65a7fd77a2ee4306 Aiuto! Non riesco a capire come formattare questi collegamenti. – mdahlman

risposta

5

Penso che questo non sia possibile. Per quanto ne so, le query di posizione forniranno un cursore speciale che può utilizzare solo le query di posizione come parametri (ad esempio $within). .

v 2.0.1 dà un messaggio di errore più descrittivo: error: { "$err" : "geo field only has 1 element", "code" : 13068 }

Il problema con l'indicizzazione è che, in generale, la negazione è MALE. La maggior parte degli indici non risponde bene quando li giri, quindi anche se la query ha funzionato, probabilmente non è desiderabile perché probabilmente dovrà fare una scansione della tabella.

Non ne sono completamente sicuro, un messaggio per il newsgroup è probabilmente una buona idea.

+3

Sì, è stato utile un post al newsgroup. Altri hanno richieste simili. Il supporto per $ o $ tutti sono forse più utili (meno EVIL), ma non sono supportati neanche. Il miglioramento è richiesto qui: https://jira.mongodb.org/browse/SERVER-3984 – mdahlman

+0

Mi piace mongodb in programma Due: 31 dicembre 2012 UTC – user956584

+0

Non è ancora possibile? Sto usando mongodb 2.6.4 ... –