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

Geonear sorter efter afstand og tid

Den korrekte forespørgsel, der skal bruges her, bruger aggregeringsramme som har $geoNear pipeline fase for at hjælpe med dette. Det er også det eneste sted, du kan "sortere" efter flere nøgler, som desværre den "geospatiale" $nearSphere har ikke en "meta" projektion for "afstand" som $text har en "score".

Også geoNear databasekommando du bruger kan heller ikke bruges med "cursor" .sort() på den måde heller.

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 }
])

Det svarer til det, du forsøger at gøre.

Med aggregeringsrammen bruger du "pipeline-operatørerne" i stedet for "cursor modifiers" for at gøre ting som $sort , $skip og $limit . Også disse skal være i en logisk rækkefølge, hvorimod markørmodifikatorerne generelt løser det.

Det er en "pipeline", ligesom "Unix pipe". |

Vær også forsigtig med "maxDistance" og "distanceMuliplier". Da dine koordinater er i "ældre koordinatpar" og ikke GeoJSON format, så måles afstandene i "radianer". Hvis du har GeoJSON lagrede lokationsdata, returneres resultatet i "meter".




  1. Redis som en database

  2. Indstil standarddatoen i Mongoose-dokumentet til nu + [noget stigning]

  3. hvordan man opretter indekset fra mongoose i elastisk søgning i node,expressjs

  4. ADVARSEL Fejl:Meteorkode skal altid køre inden for en Fiber, når opkaldsmetode på serveren