MongoDBサーバーが十分に最新であり、バージョンが2.6以降である限り、この機能は実際には一般的なクエリエンジンに移動されています。ここでのマングースメソッドは、 .runCommand()
をラップします。 将来のすべてのリリースで非推奨と見なされるフォームであるため、追加の演算子を使用して標準のクエリを配置するだけです。
GeoLocation.find({
"$nearSphere": {
"$geometry": {
"type": "Point",
"coordinates": [parseFloat(req.params.lng), parseFloat(req.params.lat)]
},
"$maxDistance": distanceInMeters
},
"loc.type": "Point"
},function(err,docs) {
// The documents are also mongoose document objects as well
});
$ nearSphere
のその他のオプションを参照してください
またはオプションの他の演算子。ここでの主な違いは、 $ maxDistance
です。 GeoJSONフォームが使用されている場合はメートル単位であり、そうでない場合はラジアンです。
もちろん、 $ geoNear コード>
集約パイプラインの演算子。これはMongoDB2.4以降で利用可能であり、「クエリ」などの他のオプションを使用して結果をさらに絞り込むことができます。ここで考えられる他の利点は、クエリポイントからの「距離」を表すフィールドを結果に「投影」することです。これは、他の計算やカスタム並べ替えで使用できます:
GeoLocation.aggregate(
[
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [parseFloat(req.params.lng), parseFloat(req.params.lat)]
},
"distanceField": "distance",
"maxDistance": distanceInMeters,
"spherical": true,
"query": { "loc.type": "Point" }
}},
{ "$sort": { "distance": -1 } } // Sort nearest first
],
function(err,docs) {
// These are not mongoose documents, but you can always cast them
}
);
注意すべきその他の違いは、標準のクエリフォームでは、「コマンド」フォームの場合のように、結果が100ドキュメントに制限されなくなったことです。集計$geoNear
デフォルトでは結果として100ドキュメントに制限されますが、返されるドキュメントの数は、pipelineコマンドに追加の「limit」オプションを使用して調整できます。集計ステートメントは、検索から返される最大のドキュメント以外の結果を「並べ替え」ませんが、条件が与えられた場合の上位の結果ですが、順番に返されないため、図のように並べ替える必要があります。
いずれの場合も、コマンドフォームは非推奨と見なされ、将来削除されるため、これらのフォームのいずれかを使用するようにコードを移動する必要があります。マングースAPIがこれらのフォームのいずれかの「ラッパー」としてそのメソッドを保持するかどうかは不明ですが、ほとんどの場合、サポートされているフォームを使用することをお勧めします。