2017-05-04 14 views
1

異なる精度のクエリを使用している場合、MongoDBがドキュメントを返すのに問題があります。ここで

は私のDBのサンプルレコードです:ここで

{"P_Latitude": "32.896272727272", "P_Longitude": "-109.8293454545"} 

にはドキュメントを返していないサンプルクエリです:

{ 
    "P_Latitude": { 
     "$gt": "32.097473448554915", 
     "$lt": "33.45585495144508" 
    }, 
    "P_Longitude": { 
     "$lt": "-110.0001001", 
     "$gt": "-99.9999999" 
    } 
} 

しかし、私はより多くの最後の$ GTを変更したとき-100よりもうまくいきます。

{ 
    "P_Latitude": { 
     "$gt": "32.097473448554915", 
     "$lt": "33.45585495144508" 
    }, 
    "P_Longitude": { 
     "$lt": "-110.0001001", 
     "$gt": "-100.9999999" 
    } 
} 

これは精度の問題ですか?これは、シェル内でもMonkドライバを使っても同じように動作します。

ありがとうございました!

答えて

1

問題は、P_LatitudeP_Longitudeの値を数値ではなく文字列として保存していることです。その結果、数値の代わりにlexical orderを使用して比較が実行されます。

あなたのドキュメントではなく、次のようになります。

{"P_Latitude": 32.896272727272, "P_Longitude": -109.8293454545} 

そして、これと同様に問合せ:

{ 
    "P_Latitude": { 
     "$gt": 32.097473448554915, 
     "$lt": 33.45585495144508 
    }, 
    "P_Longitude": { 
     "$gt": -110.0001001, 
     "$lt": -99.9999999 
    } 
} 
+0

働いていたことを!ありがとう。クエリが今機能するためであるが、私は経度の$ LTおよび$ GTを切り替えるために必要: ' "P_Longitude":{ "$のGT":-110.0001001、 "$のLT":-99.9999999 } ' –

+0

@MartinSpriggs良い点が編集されました。また、ロケーション別のクエリをより効率的にするには、利用可能な[geospatial query operators](https://docs.mongodb.com/manual/reference/operator/query-geospatial/)を確認してください。 – JohnnyHK

関連する問題