MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

$geoNear (Aggregat-Pipeline) gibt keine korrekten Dokumente zurück

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.