2017-05-04 54 views
1

我在使用(我假設)不同的精度查詢時讓MongoDB返回文檔時遇到了問題。

這裏是我的數據庫中的樣本記錄:

{"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的數量較大它的工作原理...像:

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

這是一個精度問題,還是別的?它在shell中使用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好點,編輯。此外,請務必查看可用的[地理空間查詢運算符](https://docs.mongodb.com/manual/reference/operator/query-geospatial/),以便按位置查詢更高效。 – JohnnyHK