sql >> Databasteknik >  >> NoSQL >> MongoDB

Geonear sortera efter avstånd och tid

Den korrekta frågan som ska användas här använder aggregationsramverket som har $geoNear pipeline skede för att hjälpa till med detta. Det är också det enda stället du kan "sortera" efter flera nycklar, som tyvärr den "geospatiala" $nearSphere har ingen "meta"-projektion för "avstånd" som $text har ett "poäng".

Även geoNear databaskommandot du använder kan inte heller användas med "cursor" .sort() på det sättet 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 är motsvarigheten till vad du försöker göra.

Med aggregeringsramverket använder du "pipeline-operatorer" istället för "markörmodifierare" för att göra saker som $sort , $skip och $limit . Även dessa måste vara i en logisk ordning, medan markörmodifierarna vanligtvis löser det.

Det är en "pipeline", precis som "Unix pipe". |

Var också försiktig med "maxDistance" och "distanceMuliplier". Eftersom dina koordinater är i "äldre koordinatpar" och inte GeoJSON format, då mäts avstånden i "radianer". Om du har GeoJSON lagrad platsdata så returneras resultatet i "meter".




  1. Ta bort flera dokument från mongo i en enda fråga

  2. glesa index och nollvärden i mongo

  3. Ta bort underfält från mongoDb-dokument

  4. Hur startar jag villkorligt om löfteskedjan från början?