2016-03-24 11 views
0

からゼロ距離となる$検索:私はMongoDBの中に以下のレコード持ってnearSphereが照会ポイント

{ 
    "_id" : ObjectId("56e63313059484f212a4305f"), 
    "title" : "The video title", 
    "location" : { 
     "coordinates" : [ 
      -73.9667, 
      40.78 
     ], 
     "type" : "Point" 
    }, 
} 

を私は正確なの場所ですべてのポイントを見つけることができるようにしたいです。私が書く場合 :

db.videos.find({ 
    location: { 
    '$nearSphere': { 
     '$geometry': { 
     type: 'Point', 
     coordinates: [-73.9667, 40.78] 
     }, 
     '$maxDistance': 0 
    } 
    } 
})[0] 

私はどんな結果を得ることはありません。私がタイプしたら:

db.videos.find({ 
    location: { 
    '$nearSphere': { 
     '$geometry': { 
     type: 'Point', 
     coordinates: [-73.9667, 40.78] 
     }, 
     '$maxDistance': 0.00001 
    } 
    } 
})[0] 

私は1つの結果を得る。

私は見ていないと見て、どこにもドキュメントでmaxDistanceが0

ができことができないと言いますか?

答えて

0

意味をなさないと思いますように、0から$maxDistanceセットは、オプションを設定していなかったかのように無視されます。

"完全一致"を探している場合は、それを求めてください。これは、任意の説明で$nearSphereクエリではありません。もちろん、その「正確な」場所文書照合を返します

db.videos.find({ 
    "location.coordinates" : [ -73.9667, 40.78 ] 
}) 

を。

もう少し複雑なものは、集計$geoNearを代わりに使用してください。それはあなたが後でフィルタリングに使用できる「距離」プロジェクト:

db.videos.aggregate([ 
    { "$geoNear": { 
     "near": { 
      "type": "Point", 
      "coordinates": [ -73.9667, 40.78 ] 
     }, 
     "distanceField": "distance", 
     "spherical": true 
    }}, 
    { "$match": { "distance": 0 } } 
])    

のでintialパイプラインステージは、「距離」を返し、第二段階では、その距離が実際0にあったすべての結果をフィルタリングします。

照会されたオブジェクトが「ポリゴン」や「正確な」座標配列と一致しない他のGeoJSONフォームのようなものだった場合は、実際に必要です。

一般的な「正確な」配列の一致は、「ポイント」データに適しています。

関連する問題