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.