sql >> Database teknologi >  >> NoSQL >> MongoDB

$geoNear (samlet pipeline) returnerer ikke korrekte dokumenter

Det er slet ikke den "samme" forespørgsel. Der er en klar forskel på at bruge en separat $match trin, da "filtreringen" kun udføres "efter" de "nærmeste resuts" er fundet. Det betyder, at du potentielt returnerer "mindre" resultater, da kriterierne ikke udstedes i kombination.

Det er derfor, der er en "forespørgsel" mulighed i $geoNear :

db.place.aggregate(
[
    { 
        $geoNear: { 
            spherical: true,
            near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
            distanceField: "dist",
            query: {
                "schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" } 
            }
        }
    }
])

Nu er det samme forespørgsel. Eller det ville være nøjagtigt det samme, hvis du brugte $nearSphere . Siden $near tager ikke højde for jordens krumning i afstandsberegninger. $nearSphere og $geoNear gør.

Men hovedpointen er at kombinere med "forespørgslen" mulighed, da det er den eneste måde, du virkelig får begge kriterier i betragtning i den indledende søgning.




  1. Tjek for at se, om en MongoDB-samling er begrænset med .NET 2.0-driveren

  2. Hvorfor vises ISO-datoen i Mongodb en dag tidligere?

  3. Skal jeg implementere automatisk inkrementering i MongoDB?

  4. Mongoose slutter sig til to samlinger og får kun specifikke felter fra den samlede samling