MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

$geoNear (pipeline agrégé) ne renvoie pas les documents corrects

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.