2014-10-27 114 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