ここで使用する正しいクエリは、集約フレームワーク
を使用します。 $ geoNearがあります
これを支援するパイプラインステージ。残念ながら「地理空間」$nearSphere のように、複数のキーで「並べ替え」ることができる唯一の場所でもあります。 $ textのような「距離」の「メタ」プロジェクションはありません 「スコア」があります。
また、 geoNear 使用しているデータベースコマンドは、「カーソル」 .sort()でも使用できません。 そのようにも。
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 }
])
それはあなたがやろうとしていることと同じです。
集計フレームワークでは、"パイプライン演算子"
を使用します $ sortのようなことをするための「カーソル修飾子」の代わりに 、 $ skip および$limit 。また、これらは必須 論理的な順序であるのに対し、カーソル修飾子は通常それを解決します。
「Unixパイプ」と同じように「パイプライン」です。 |コード>
また、「maxDistance」と「distanceMuliplier」にも注意してください。座標は「レガシー座標ペア」であり、 GeoJSONではないため 形式の場合、距離は「ラジアン」で測定されます。 GeoJSONに位置データが保存されている場合、結果は「メートル」で返されます。