sql >> Base de Datos >  >> NoSQL >> MongoDB

Ordenar geonear por distancia y tiempo

La consulta correcta para usar aquí usa el marco de agregación que tiene el $geoNear etapa de canalización para ayudar con esto. También es el único lugar en el que puede "ordenar" por varias claves, ya que, lamentablemente, el $nearSphere "geoespacial" no tiene una proyección "meta" para "distancia" como $text tiene una "puntuación".

También el geoNear El comando de base de datos que está utilizando tampoco se puede usar con "cursor" .sort() de esa manera tampoco.

db.paging.aggregate([
    { "$geoNear": {
        "near": [106.606033,29.575897 ],
        "spherical": true,
        "distanceField": "distance",
        "distanceMuliplier": 6371,
        "maxDistance": 1/6371
    }},
    { "$sort": { "distance": 1, "createdate": -1 } },
    { "$skip": ( 2-1 ) * 2 },
    { "$limit": 5 }
])

Eso es el equivalente de lo que estás tratando de hacer.

Con el marco de agregación, utiliza los "operadores de canalización" en lugar de "modificadores de cursor" para hacer cosas como $sort , $skip y $limit . También estos deben estar en un orden lógico, mientras que los modificadores de cursor generalmente funcionan.

Es una "tubería", al igual que "tubería Unix". |

Además, tenga cuidado con "maxDistance" y "distanceMuliplier". Dado que sus coordenadas están en "pares de coordenadas heredados" y no GeoJSON formato, entonces las distancias se miden en "radianes". Si tiene datos de ubicación almacenados en GeoJSON, el resultado se muestra en "metros".