3

我有一个 mongo 文件:

{ "_id" : 0, "name" : "Vasya", "fav" : [ { "type" : "t1", "weight" : 1.4163 }, { "type" : "t2", "weight" : 11.7772 }, { "type" : "t2", "weight" : 6.4615 }, { "type" : "homework", "score" : 35.8742 } ] }

对于删除数组“fav”中的最低元素,我使用以下 Python 代码:

db.people.update({"fav":{"type":"t2", "weight":lowest}}, {"$pull":{"fav"{"type":"t2", "weight":lowest}}})

其中变量lowest是 6.4615 和 35.8742 之间的最小值。

问题是这段代码什么都不做。没有错误,并且值不会从数组中删除。但是如果我在 mongo shell 中编写相同的代码,结果是肯定的。

不幸的是,我在 pymongo 和 mongo 的经验不是很好。因此,如果有人知道问题所在,那就太好了。

4

1 回答 1

2

该语法在 Mongo shell 和 pymongo 中对我来说很好,因此怀疑问题是浮点数的精度。

我不知道你是如何推导/计算的lowest,但你可能想考虑标准化小数点后的最大有效位数,或者甚至有一个函数可以将你的浮点数标准化为相同的精度,当你最初保存时文档以及您以后查询或更新它们时。

Mongo 和 Python 都不认为 6.676176060654615 等于 6.67617606065 这解释了为什么您的更新没有效果。

于 2012-11-21T22:01:30.177 回答