2012-11-19 39 views
3

我有一個蒙戈文件:

{ "_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 } ] } 

對於數組 「最愛」 中刪除最低的元素,我用下面的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

你能打印出什麼「最低」的確切值在Python更新調用之前?我懷疑可能會出現某種類型的浮點比較問題。 –

+0

打印出來顯示我浮動數字值 – user1837062

+1

這究竟是什麼?它是否與您在文檔中顯示的值完全匹配? –

回答

2

在Mongo shell和pymongo中,語法對我來說工作正常,所以懷疑問題是浮點數的精度問題。

我不知道你是如何派生/計算lowest但你可能要考慮標準化小數點後的有效數字的最大數量,或者甚至可能有一個函數,使你的浮點數標準化到相同的精度,兩當您最初保存文檔時以及稍後查詢或更新它們時。

Mongo和Python都不認爲6.676176060654615等於6.67617606065,這就解釋了爲什麼你的更新沒有效果。