Estoy trabajando en un sistema en Java, parte del cual representa expresiones de una representación interna a una consulta MongoDb. Represento las expresiones "Y" de la misma manera que las expresiones "O". Así que si tengo una expresión como "categoría = 'GIBBLY' y Active = true", que se representa como:
{$and:[{"category":"GIBBLY"},{"active":true}]}
entiendo que esto no es estrictamente necesario en este caso. Lo que no puedo entender es si hay siempre un caso donde $ y es necesario (en mi sistema, a menudo habrá AND anidados y OR, si eso hace alguna diferencia).
La razón por la cual este es un problema para mí es que $ y el operador parecen fallar para las consultas geoespaciales. Una consulta como esta:
{"$and":[{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}}, {"active":true}]}
falla con un "no puede encontrar índice especial: 2d" error. Si puedo volver a hacer la consulta como:
{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}, "active":true}
funciona bien.
Intenté investigar un poco, y encontré una discusión del problema on the mongodb-user group, que se refería a una discusión de compound indexes in geospatial queries.
Ninguna de la información que encontré realmente explica por qué $ y no funciona con la consulta geoespacial. No tengo ningún índice compuesto definido en mi base de datos, y la consulta que no es $ y funciona, por lo que no estoy seguro de cómo $ y funciona de manera diferente con respecto a los índices.
Para resumir, mis preguntas son:
es de $ y nunca es necesario, y si es así, en qué tipo de casos?
¿Tiene $ y difiere de alguna forma fundamental de la representación implícita con respecto a los índices?
¿Por qué exactamente $ no funciona con consultas geoespaciales?
¿Es un error si $ nearSphere es la única condición en $ y? – MrKurt
https://jira.mongodb.org/browse/SERVER-4572. No pude encontrar ningún comentario sobre eso también. – pingw33n
Sí - El mismo error si $ nearSphere es la única condición. – dkilmer