sql >> Base de Datos >  >> NoSQL >> MongoDB

$geoNear (canalización agregada) no devuelve los documentos correctos

No es la "misma" consulta en absoluto. Hay una clara diferencia en el uso de un $match etapa, ya que el "filtrado" sólo se realiza "después" de encontrar los "resultados más cercanos". Esto significa que potencialmente arroja resultados "menos" ya que los criterios no se emiten en combinación.

Por eso hay una "query" opción en $geoNear :

db.place.aggregate(
[
    { 
        $geoNear: { 
            spherical: true,
            near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
            distanceField: "dist",
            query: {
                "schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" } 
            }
        }
    }
])

Ahora que es la misma consulta. O sería exactamente lo mismo si usara $nearSphere . Desde $near no tiene en cuenta la curvatura de la tierra en los cálculos de distancia. $nearSphere y $geoNear lo hace.

Pero el punto principal es combinar con "query" opción, ya que esa es la única forma en que realmente se consideran ambos criterios en la búsqueda inicial.