ここで使用する正しいクエリは、集約フレームワーク
を使用します。 $ 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に位置データが保存されている場合、結果は「メートル」で返されます。