2014-10-27 124 views
2

我有一個集合名稱myplace具有place_name(字符串),緯度(float64)和經度(float64)。現在我有一個緯度12.34567,我需要搜索mongodb這個緯度是否存在或不存在。 我想這樣的,但它的返回null如何比較mongodb中的浮點值?

db.myplace.find({"latitude":12.3456}) 
+0

這是正確的查詢假設該_latitude_的值被保存浮子,而不是作爲串。 – 2014-10-27 07:05:33

+0

它只有float64,但它返回空 – sanu 2014-10-27 07:06:44

回答

3

它通常是一個壞主意,比較浮動的平等點值,因爲發生在不同的浮點運算可能會導致某些值取整你預計等於有稍微不同的價值。

更好的解決方案是檢查兩個浮點值之間的差異是否小於特定的誤差範圍E。對於這種查詢,支票變成範圍檢查例如即:

12.3456 - E < latitude < 12.3456 + E 

如上所述in this question,這種查詢可以以MgO作爲表示:

lat := 12.3456 
E := 0.0001 
q := c.Find(bson.M{"latitude": bson.M{"$gt": lat - E, "$lt": lat + E}}) 
1

首先,你找(有)12.34567或(查找)12.3456?

浮點數是實數的近似值。尋找一個範圍內的數字。例如,

(12.34567 - 0.0001) < latitude < (12.34567 + 0.0001) 

參考文獻:

Floating point