我有一份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的经历并不是那么好。所以,如果有人知道问题是什么,那就太好了。
答案 0 :(得分:2)
在Mongo shell和pymongo中,语法对我来说很好,所以怀疑问题是浮点数的精度。
我不知道你是如何派生/计算lowest
但你可能想要考虑标准化小数点后的最大有效位数,或者甚至可能有一个将你的浮点数标准化为相同的函数精确,无论是最初保存文档还是稍后查询或更新文档。
Mongo和Python都认为6.676176060654615不等于6.67617606065,这就解释了为什么你的更新没有效果。