始める前に、2つのポイントを追加します-
- mongoを使用する場合は、常に[long。、lat。]の方法で場所を挿入してください
- 挿入するジオメトリのタイプを指定してください。 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ドキュメントを参照してください。
お役に立てば幸いです...良い一日を...:)