Es ist überhaupt nicht die "gleiche" Abfrage. Es gibt einen deutlichen Unterschied bei der Verwendung eines separaten $match
da die "Filterung" erst "nachdem" die "nächstgelegenen Ergebnisse" gefunden wurden. Das bedeutet, dass Sie möglicherweise "weniger" Ergebnisse zurückgeben, da die Kriterien nicht in Kombination ausgegeben werden.
Deshalb gibt es eine "Abfrage"
Option in $geoNear
:
db.place.aggregate(
[
{
$geoNear: {
spherical: true,
near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
distanceField: "dist",
query: {
"schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" }
}
}
}
])
Das ist jetzt dieselbe Abfrage. Oder es wäre genau dasselbe, wenn Sie $nearSphere
. Seit $near
berücksichtigt nicht die Erdkrümmung bei Entfernungsberechnungen. $nearSphere
und $geoNear
tut.
Aber der Hauptpunkt ist die Kombination mit "query"
Option, da nur so wirklich beide Kriterien bei der ersten Suche berücksichtigt werden.