如何比较mongodb中的浮点值?

时间:2014-10-27 06:56:33

标签: mongodb go mgo

我有一个集合名称myplace,其中包含place_name(字符串),纬度(float64)和经度(float64)。现在我有一个纬度12.34567,我需要搜索mongodb这个纬度是否存在。 我试过这样但是它返回null

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

首先,您是否正在寻找(有)12.34567或(找到)12.3456?

浮点数是实数的近似值。寻找范围内的数字。例如,

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

参考文献:

Floating point