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

ポイントが含まれているすべての円を取得するにはどうすればよいですか?

    MongoDBの$geoIntersectsを使用して可能です 地理空間クエリ演算子。

    したがって、GeoJsonポリゴンのコレクションがあり、指定されたポイントと交差するすべてのポリゴンを見つけたい場合は、次を実行する必要があります。

    db.places.find( { <locationFieldOfYourDocuments> :
                      { $geoIntersects :
                        { $geometry :
                          { type : "Point" ,
                            coordinates: [long, lat]
                    } } } } )
    

    上記のコマンドで、loc GeoJsonポリゴンの座標を含む各ドキュメントの属性です。また、2dsphereがあることを確認してください <locationFieldOfYourDocuments>のインデックス 。

    ここで、元の問題を解決するために、JavaScriptを少し使用します。より良い解決策があるかもしれませんが、私の知る限りではありません。

    すべてのサークルがCirclesに保存されているとしましょう コレクション。そのコレクションにクエリを実行し、各円を1つずつフェッチしてから、円と交差するかどうかに関係なくクエリする単一のポイントを含む別のコレクションとの交差を実行します。したがって、ポイントをSinglePointに保存します。 コレクション。

    スクリプトは次のようになります...

    db.Intersections.remove({}); // emptying the output collection
    var circleCursor = db.Circles.find();
    while (circleCursor.hasNext()) {
        var circle = circleCursor.next();
        var coord = circle.location;
        var radiusInRadians = circle.radius * conversionFactorForRadius;
        var intersect = db.SinglePoint.find({loc :
                                             { $geoWithin :
                                               {$centerSphere : [coord], radiusInRadians}
                                             }});
        if (intersect.hasNext()) {db.Intersections.add(circle)} // this will add all intersecting circles to Intersections collection
    }
    

    このスクリプトをファイル(myScript.js)に保存して、電話をかけるだけです。

    mongo DBName pathTomyScript.js
    

    これにより、入力ポイントと交差するすべての円がIntersectsコレクションに保存されます。上記のコレクションはすべてDBNameデータベースにある必要があります。




    1. PyMongoトランザクションエラー:トランザクション番号は、レプリカセットメンバーまたはmongosでのみ許可されます

    2. 並べ替えは、MongoDBの`$or`および`$in`クエリでどのように機能しますか?

    3. 2点間のMongoDB印刷距離

    4. MongoDBUncleanShutdown-修復に失敗します