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}}})

variablelowestは 6.4615 から 35.8742 の間の最小値です。

問題は、このコードが何もしないことです。エラーはなく、値は配列から削除されません。しかし、mongo シェルで同じコードを書くと、結果は肯定的です。

残念ながら、pymongo と mongo での私の経験はあまり良くありません。したがって、誰かが問題が何であるかを知っていれば、それは素晴らしいことです。

4

1 に答える 1

2

この構文は、Mongo シェルと pymongo で問題なく動作するため、疑わしいのは浮動小数点数の精度です。

どのように導出/計算しているかはわかりませんがlowest、小数点以下の有効桁数の最大数を標準化することを検討するか、最初に保存するときの両方で、浮動小数点数を同じ精度に正規化する関数を使用することを検討してください。ドキュメントと後でそれらをクエリまたは更新するとき。

Mongo も Python も、6.676176060654615 が 6.67617606065 と等しいとは見なしません。これは、更新が効果がない理由を説明しています。

于 2012-11-21T22:01:30.177 に答える