1

座標に近い場所のコレクションからいくつかの結果を取得しようとしています。この目的のために、lng および lat 属性を持つ location.position 属性に対して 2 次元インデックスを使用しています。

問題は、私が配置したすべての座標で、同じ 60 の結果 (コレクション全体) が返されることです。

私のコレクションのドキュメントはすべて私の GPS 座標に近いものですが、0.0、0.0 座標またはその他のペアを配置すると、常に同じ値が返されます。

実際、空の find() を使用すると、クエリはまったく同じ結果を返します。

エラーが返されていないため、インデックスは正しく作成されているようです。

私のコレクションのオブジェクトは次のようなものです:

{ "_id" : "80293840923...", 
"name": "myname", 
"location" : { 
"position" : { "lng": -196988, "lat": 43.30594 } 
"address": "example", 
"city": "example"  } 
}

インデックスは次のように作成されます。

places_collection.ensureIndex({"location.position": "2d"}, {name: "index2dLocation"}, function(error, indexName){
    callback("", "Indice creado: " + indexName)
});

検索は次のようになります。

places_collection.find( 
{ "location.position" : { $near : [ parseFloat(-123.98) , parseFloat(162.342) ] } }
).toArray(function(error, results) {
          if( error ){ callback(error, "")
          }else{ console.log(results.length); callback(null, results); }
});

最後に、前に述べたように、私の検索では常に同じ結果が返されます。座標を入れても構いません。空の find() を作成してもかまいません。

ここで何か助けてください。私はそれを機能させる方法がわかりません。

どうもありがとうございました。

4

1 に答える 1

1

最後に、解決策は、$maxDistanceプロパティを追加して、 の半径よりも遠いすべてのドキュメントを回避することでした$maxDistance

そのプロパティを配置せず、1 つの座標の近くに 10 個のドキュメントしかない場合、非常に遠い座標で検索を行うと、その近くにドキュメントがないため、同じ 10 個のドキュメントが返されます。新しいコーディネート。

さらに、$maxDistanceの単位はであると言うことが重要なので、ここに私の解決策があります: https://stackoverflow.com/a/7841830/974828

度をキロメートルに変換するには、111.12 で割る必要があります。

結果は次のとおりです。

 db.places.find( { loc : { $near : [50,50] , $maxDistance : 1/111.12 } } )
于 2013-05-24T15:06:53.463 に答える