python - pymongo+update 抛出 $pull

标签 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 中的体验不是很好。因此,如果有人知道问题出在哪里,那就太好了。

最佳答案

语法在 Mongo shell 和 pymongo 中对我来说工作正常,所以怀疑问题是 float 的精度。

我不知道你是如何推导/计算最低的,但你可能想考虑标准化小数点后有效数字的最大数量,或者甚至可能有一个函数来标准化你的 float 以相同的精度,无论是在您最初保存文档时,还是在您稍后查询或更新文档时。

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

关于python - pymongo+update 抛出 $pull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462863/

相关文章:

mongodb - .NET Core 3.1 + GraphQL + MongoDB

python - 在继续之前如何/最好的方式等待 Mongod 实例启动

python - 如何使用负值删除 pandas 数据框中的所有行?

python - 如何重新连接 asyncio 上的套接字?

python - 如何记录python函数参数类型?

python - Mongodb : AutoReconnect, 连接被对端重置

python - 在 python 中使用 mmap

node.js - Visual Studio 代码调试 Node.JS NOENT : no such file or directory when debugging with MongoDB

MongoDB/PyMongo 不会将 $set 属性设置为文档 - 但会设置所有其他属性! (奇怪的错误)

python - MongoDB 文件路径作为唯一索引