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

経度、緯度、特定の距離を持つmongodbフィルタードキュメント

    始める前に、2つのポイントを追加します-

    1. mongoを使用する場合は、常に[long。、lat。]の方法で場所を挿入してください
    2. 挿入するジオメトリのタイプを指定してください。 mongoDB ドキュメント を参照してください タイプの詳細については。

    あなたの質問に来て、私はあなたの質問として3つのポイントを追加しました、そして私のデータは以下のようになります-

    > db.test.find()
    { "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
    { "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ] }
    { "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ] }
    

    これはmongoで球形タイプの場所を使用するための予約済みキーであるため、タイプ「ポイント」を指定しました。さらに、場所に[long、lat]を追加しました。後で、locフィールドに2dSphereインデックスを追加しました。

    db.test.createIndex({loc:"2dsphere"})
    

    次に、以下のクエリを実行して、マラサハリ[77.6974,12.9591]からの距離を確認しました-

    > db.test.aggregate([ {$geoNear: { near :{type: "Point", coordinates:[77.6974,12
    .9591]}, distanceField: "distance", spherical: true } } ])
    { "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ], "distance": 9583.305405402776 }
    { "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ], "distance" : 12391.53898270671 }
    { "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ], "distance": 13828.057829128267 }
    

    上記のクエリは、距離を知るためのテストを目的としています。距離をメートルで表示するので、簡単にkmに変換できます。

    今、私は10 km以内のマラサハリからの場所を見つけるために、以下のクエリを実行しました。距離と私は私の望ましい結果を得ました-

    > db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
    { "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
    

    あなたが試みていたアプローチにいくつかの問題が見つかりました-

    • 場所は[long、lat]の方法で指定する必要があります。
    • type:ポイントタイプの場所を使用するには、「ポイント」を指定する必要があります。予約キーワードです。
    • ここでは距離がメートル単位で取得されます。いくつかの場所では、モンゴでもラジアンで撮影されています。 これを参照してください ラジアン距離の詳細については、mongoDBドキュメントを参照してください。

    お役に立てば幸いです...良い一日を...:)




    1. MongoDBからPostgreSQLGroovyアプリケーションへの移行

    2. MongoDBの集計フレームワークで複数の列をグループ化して合計することは可能ですか?

    3. Springデータの一致とフィルターのネストされた配列

    4. Android Studio:MongoJavaDriverを使用してMongoDBサーバーに接続する