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

MongoDB Geospacial Query Spheres Overlapping Single Point

    GeoJSONオブジェクトを使用して場所を表すことができればもっと良いでしょうが、現時点ではサポートされるタイプは実際には制限されています そのため、理想的な「サークル」タイプはサポートされていません。

    最も近いのは円を近似する「ポリゴン」ですが、これはおそらく、このクエリの目的のためだけに構築するには少し手間がかかりすぎます。これを実行してから $geoIntersects 結果は、クエリポイントからの距離で「ソート」されないということです。これは、「最も近いピザ」を原点に見つけるという目的とは逆のようです。

    幸い、 $geoNearがあります。 MongoDB 2.4以降で、集約フレームワークに追加された操作。ここでの良い点は、結果に距離フィールドの「投影」ができることです。これにより、原点からの距離に対する「半径内」の制約にあるポイントに対して、サーバー上で論理フィルタリングを実行できます。サーバーでの並べ替えも可能です。

    ただし、インデックスをサポートするには、スキーマを変更する必要があります

    db.places.insert({
        "name": "Pizza Hut",
        "location": { 
            "type": "Point",
            "coordinates": [
                151.00211262702942,
                -33.81696995135973
            ]
        },
        "radius": 20
    })
    
    db.places.ensureIndex({ "location": "2dsphere" })
    

    集計クエリの場合:

    db.places.aggregate([
    
        // Query and project distance
        { "$geoNear": {
            "near": { 
                "type": "Point",
                "coordinates": [ 
                    150.92094898223877,
                    -33.77654333272719
                ]
            },
            "distanceField": "distance",
            "distanceMultiplier": 0.001,
            "maxDistance": 100000,
            "spherical": true
        }},
    
        // Calculate if distance is within delivery sphere
        { "$project": {
             "name": 1,
             "location": 1,
             "radius": 1,
             "distance": 1,
             "within": { "$gt": [ "$radius", "$distance" ] }
        }},
    
        // Filter any false results
        { "$match": { "within": true } },
    
        // Sort by shortest distance from origin
        { "$sort": { "distance": -1 } }
    ])
    

    基本的にこれは言う、

    $geoNear 結果を絞り込み、必要に応じてデフォルトの100を超える結果を返し、基本的に「タイプ」や「名前」など、ドキュメントにあるその他の情報をクエリに渡すためです。




    1. MongoDBは、他のすべての要素に応じて要素を削除します(反復)

    2. 保存後にマングースが生息する

    3. Redisはどのようにして高いスループットとパフォーマンスを実現しますか?

    4. Mongoose.jsサブドキュメント配列を取得できません