Não é a "mesma" consulta. Há uma diferença distinta em usar um
$match
etapa, uma vez que a "filtragem" só é feita "depois" de serem encontrados os "resultados mais próximos". Isso significa que você potencialmente retornará resultados "menos", pois os critérios não são emitidos em combinação. É por isso que existe uma
"consulta"
opção em $geoNear
:db.place.aggregate(
[
{
$geoNear: {
spherical: true,
near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
distanceField: "dist",
query: {
"schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" }
}
}
}
])
Agora essa é a mesma consulta. Ou seria exatamente o mesmo se você usasse
$nearSphere
. Desde $near
não leva em conta a curvatura da Terra em cálculos de distância. $nearSphere
e $geoNear
faz. Mas o ponto principal é combinar com a
"query"
opção, já que essa é a única maneira de realmente considerar os dois critérios na pesquisa inicial.