Ce n'est pas du tout la "même" requête. Il existe une nette différence dans l'utilisation d'un $match
étape, puisque le « filtrage » n'est effectué qu'« après » que les « résultats les plus proches » ont été trouvés. Cela signifie que vous renvoyez potentiellement "moins" de résultats puisque les critères ne sont pas émis en combinaison.
C'est pourquoi il y a une "query"
option dans $geoNear
:
db.place.aggregate(
[
{
$geoNear: {
spherical: true,
near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
distanceField: "dist",
query: {
"schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" }
}
}
}
])
C'est la même requête. Ou ce serait exactement la même chose si vous utilisiez $nearSphere
. Depuis $near
ne tient pas compte de la courbure de la terre dans les calculs de distance. $nearSphere
et $geoNear
fait.
Mais le point principal est de combiner avec le "query"
option, car c'est la seule façon de vraiment prendre en compte les deux critères dans la recherche initiale.