pymongo + update throw $ pull

时间:2012-11-19 21:48:46

标签: python mongodb pymongo

我有一份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的经历并不是那么好。所以,如果有人知道问题是什么,那就太好了。

1 个答案:

答案 0 :(得分:2)

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

我不知道你是如何派生/计算lowest但你可能想要考虑标准化小数点后的最大有效位数,或者甚至可能有一个将你的浮点数标准化为相同的函数精确,无论是最初保存文档还是稍后查询或更新文档。

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