2016-12-16 11 views
0

mongodbの$ near演算子を使ってある地域内のユーザーに接近しようとしていますが、正しい方法がわかりません。私のルートで

私は近接にローカルなユーザーを検索するJavaScriptモデル(マングース)を持っている:

collection.find({ 
    $elemMatch: { 
    locations: { 
     $near: coords, 
     $maxDistance: maxDistance 
    } 
    } 
}) 

スキーマ設計:各ユーザーは多くの場所とそれぞれを持ってい

first_name: String, 
    last_name: String, 
    locations: [ 
    { 
     suburb: String, 
     state: String, 
     postcode: String, 
     longitude: Number, 
     latitude: Number 
    } 
    ] 

緯度と経度があります。私は成功した$ elemMatchを試しましたが、別の演算子を集約したり使用したりする必要があるかどうかはわかりません。

答えて

0

GeoJSON Pointフォーマットを使用して座標を格納し、次にmongodb 2dsphereインデックスを使用することをお勧めします。

https://docs.mongodb.com/manual/core/2dsphere/

その後、maxDistanceとminDistanceでgeoNearを使用することができます。それは非常に便利です。

だから、私の提案は、あなたがあなたのスキーマを変更することです:

first_name: String, 
    last_name: String, 
    locations: [ 
    { 
     suburb: String, 
     state: String, 
     postcode: String, 
     geometry: { 
     type: "Point", 
     coordinates: [ Number, Number ] 
     } 
    } 
    ] 

(幾何学的にGeoJSON小数点形式である)

+0

uは、クエリを提供していただけますか? – Vishu238

+0

私はmongooseをしませんが、普通のmongodb jsコードでは次のようになります: –

+0

単純な集約パイプラインを持つ: 'var queryPoint = {type:" Point "、coordinates:[13.21,55.22]}; var mycursor = collection.aggregate(aggregationpipeline); '{$ exists:false}}}}; var mycursor =コレクション。アグリゲーションパイプライン= –

関連する問題