Správný dotaz, který se zde použije, používá rámec agregace
který má $geoNear
fáze potrubí, která s tím pomůže. Je to také jediné místo, kde můžete „řadit“ podle více klíčů, jako je bohužel „geoprostorové“ $nearSphere
nemá "meta" projekci pro "vzdálenost" jako $text
má "skóre".
Také geoNear
databázový příkaz, který používáte, také nelze použít s "kurzorem" .sort()
ani tímto způsobem.
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 }
])
To je ekvivalent toho, o co se snažíte.
S agregačním rámcem používáte "pipeline operator"
místo "modifikátorů kurzoru" dělat věci jako $sort
, $skip
a $limit
. Také tyto musí být v logickém pořadí, zatímco modifikátory kurzoru to obecně vyřeší.
Je to "potrubí", stejně jako "Unix pipe". |
Pozor také na „maxDistance“ a „distanceMuliplier“. Protože vaše souřadnice jsou ve "starších párech souřadnic" a ne GeoJSON
formátu, pak se vzdálenosti měří v "radiánech". Pokud máte uložená data o poloze GeoJSON, pak se výsledek vrátí v "metrech".