私はユーザーの近接性に基づいてマッチングシステムを作成しています。基本的なアイデアは、ポイントAにはユーザーAがあり、ポイントBにはユーザーBがいるということです。両方のユーザーには、ユーザーがマッチを作るまでの距離を決定する検索フィルターがあります。この距離はキロメートルです。 地理空間クエリを作成してお互いの半径内に2人のユーザーを見つけよう
とにかく、これをバニラクエリ(集約クエリを使用せずに)で行うことは可能でしょうか?これまでのクエリはここにあります
var loc = userA.location;
var rad = userA.radius;
{$near : {
$geometry : {
type : "Point",
coordinates : loc
},
$maxDistance : rad
}
}
私はどのようにユーザーのBの設定を考慮しますか?
私は基本的に好みのサークルだったジオメトリを保存し、userAがそのサークル内にあるかどうかを確認する予定でしたが、これはちょうど正しいとは思われません。
ニールありがとう、これは素晴らしい答えです。あなたが気にしない最後の質問が1つありますが、私は半径フィールドをメートルで表しています。このクエリを実行すると、$ distanceフィールドは本当に小さな数字になります。 [docs](https://docs.mongodb.org/manual/reference/operator/aggregation/geoNear/)には言及していないようです。彼らはラジアンですか? –
@naughtyboy実際の座標はどのように保存されていますか? GeoJSON形式の場合、返される「距離」は実際にはメートルです。しかし、そうでなければラジアンから変換する必要があり、同様に「maxDistance」にも当てはまります。数式を追加することはできますが、代わりにGeoJSONにデータを変換する方がずっと簡単で便利です。 –
うーん、私は間違いなくメートルを扱うことを好むだろう。データはGeoJSONに 'loc:{type:" Point "、座標:[-80.5863052,22.7906625]、半径:500'として保存されます。座標は 'long、lat'形式で、半径はメートルで、' {loc: '2dsphere'} 'というフィールドにインデックスを作成しました。私が何かを見逃しているのかわからないのですか? –