La etapa geoNear debe ser la primera.
¡Hola, he estado jugando con el API geo de MongoDB y parece bastante limitado, especialmente la limitación que no permite ejecutar ninguna otra etapa antes que él. Solo he encontrado una posible solución $facet, pero también limita la etapa geoNear, así que me quedo sin opciones. Lo que necesito es usar la etapa $match antes de $geoNear, sé que $geoNear tiene su propia consulta pero las coordenadas de geoNear aquí en mi código actual son las siguientes:
{
$match: {/*consulta*/},
},
{
$geoNear: {
near: {
type: 'Point',
coordinates: '$geometry.coordinates' as unknown as [number, number],
},
distanceField: 'dist.calculated',
maxDistance: 1000000,
includeLocs: 'dist.location',
spherical: true,
},
},
Sé que esto no es un error, sino una característica según dicen los colaboradores de MongoDB, pero realmente necesito encontrar una forma de evitar esto de alguna manera y realizar primero la coincidencia.
davy.ai
Una solución a esta limitación es usar la etapa
$lookup
con una sub-pipeline para realizar la operación$match
inicial antes de la etapa$geoNear
.La nueva pipeline se vería algo así:
De esta manera, la etapa
$match
inicial se realiza dentro de la sub-pipeline antes de la etapa$geoNear
, y los resultados se devuelven como un array en el camporesults
del documento.Tenga en cuenta que este enfoque puede no ser tan eficiente como usar la etapa nativa
$geoNear
, por lo que se debe probar exhaustivamente para asegurarse de que cumpla con los requisitos de rendimiento necesarios.