2011-11-14 20 views
7

Tengo una consulta geoespacial básica que funciona bien en MongoDB. Parece que debería ser fácil aplicar $ no para obtener el complemento ... pero no funciona para mí. ¿Es un simple error de usuario? ¿O puede MongoDB no manejar esta consulta conceptualmente? No pude encontrar ninguna limitación en el documentation.

consulta de trabajo (se encuentra correctamente las 2 ciudades dentro de 10 millas del centro):

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

Intento de consulta del complemento (resultado deseado es el 1 ciudad que no está dentro de 10 millas):

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 
} 

para cualquier persona que quiere copiar/pegar la consulta para ver el error, aquí hay un poquito de datos de ejemplo:

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

(Estoy usando MongoDB 1.8.2 en caso de que eso importe.)

+2

eso es difícil ... También recomendaría un mensaje en el grupo de google de mongodb-user ... – PierrOz

+0

Sí, también lo recomendaría ... es una buena pregunta .. – RameshVel

+0

Una consulta como esta es no es posible, pero es una solicitud de mejora conocida. Para referencia futura, estos hilos en el Grupo de Google MongoDB discuten el problema. [Geo consulta utilizando $ e] [1] [Geo Consulta] [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 ¡Ayuda! No puedo encontrar la forma de formatear estos enlaces. – mdahlman

Respuesta

5

Creo que esto no es posible. Por lo que sé, las consultas de ubicación te darán un cursor especial que solo puede usar consultas de ubicación como parámetros (como $within). .

v 2.0.1 da un mensaje de error más descriptivo: error: { "$err" : "geo field only has 1 element", "code" : 13068 }

El problema con la indexación es que, en general, la negación es MAL. La mayoría de los índices no funcionan bien cuando los cambias de opinión, por lo que incluso si tu consulta funcionó, probablemente no sea deseable, ya que probablemente tenga que realizar un análisis de tabla.

No estoy del todo seguro de esto, un mensaje para el grupo de noticias es probablemente una buena idea.

+3

Sí, una publicación en el grupo de noticias ayudó. Otros tienen solicitudes similares. El soporte para $ o y $ all son quizás más útiles (menos MAL), pero tampoco son compatibles. La mejora se solicita aquí: https://jira.mongodb.org/browse/SERVER-3984 – mdahlman

+0

Me gusta mongodb programado Debido: 31 de dic. 2012 UTC – user956584

+0

¿Esto todavía no es posible? Estoy usando mongodb 2.6.4 ... –

Cuestiones relacionadas