3

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

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

2 回答 2

4

比较浮点值是否相等通常不是一个好主意,因为在各种浮点运算中发生的舍入可能会导致您期望相等的某些值具有略微不同的值。

更好的解决方案是检查两个浮点值之间的差异是否小于特定的误差范围E。对于这种查询,检查变为范围检查,例如:

12.3456 - E < latitude < 12.3456 + E

this question中所述,这种查询可以用mgo表示为:

lat := 12.3456
E := 0.0001
q := c.Find(bson.M{"latitude": bson.M{"$gt": lat - E, "$lt": lat + E}})
于 2014-10-27T07:22:05.300 回答
2

首先,您是在寻找(拥有)12.34567 还是(找到)12.3456?

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

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

参考:

浮点

于 2014-10-27T07:13:49.720 回答