sql >> データベース >  >> NoSQL >> MongoDB

Geonearは距離と時間で並べ替えます

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




    1. md5ハッシュをMongoDBに効率的に保存するためのベストプラクティス

    2. ストライプ:ソースまたは顧客を提供する必要があります

    3. mongodbデータベースが存在するかどうかを確認しますか?

    4. MongoDB Geospacial Query Spheres Overlapping Single Point