sql >> Database >  >> NoSQL >> MongoDB

Geoear sorteren op afstand en tijd

De juiste query om hier te gebruiken maakt gebruik van het aggregatieraamwerk met de $geoNear pijplijnfase om hierbij te helpen. Het is ook de enige plaats waar je kunt "sorteren" op meerdere sleutels, zoals helaas de "geospatiale" $nearSphere heeft geen "meta"-projectie voor "afstand" zoals $text heeft een "score".

Ook de geoNear database-opdracht die u gebruikt, kan ook niet worden gebruikt met "cursor" .sort() op die manier ook.

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

Dat is het equivalent van wat u probeert te doen.

Met het aggregatieraamwerk gebruik je de "pipeline operators" in plaats van "cursormodifiers" om dingen te doen zoals $sort , $skip en $limit . Ook deze moeten in een logische volgorde staan, terwijl de cursormodifiers het over het algemeen uitwerken.

Het is een "pijplijn", net als "Unix-pijp". |

Wees ook voorzichtig met "maxDistance" en "distanceMuliplier". Aangezien uw coördinaten in "oude coördinatenparen" zijn en niet GeoJSON formaat, dan worden de afstanden gemeten in "radialen". Als u GeoJSON-locatiegegevens hebt opgeslagen, wordt het resultaat in "meters" geretourneerd.




  1. Staat Redis alleen tekenreeksweergave toe, maar geen numerieke waarde?

  2. Hoe kan ik waarden met een lengte nul behouden tijdens de $unwind-fase van de geaggregeerde pijplijn in Mongo?

  3. rangschikkingsbord in mongo met omringende spelers

  4. MongoDB-shell-opdrachten gebruiken op het stuurprogramma van MongoDB 10Gen