python pymongo没有为"未知的修饰符引发异常:"

时间:2016-10-20 06:56:06

标签: python mongodb pymongo

尝试使用robomongo客户端中的更新查询更新mongo文档

db.test.update({"name": "test"},{"$kset": {"value": "test_value"}})

并返回以下异常 未知修饰符:$ kset 这是预期的,但使用pymongo运行相同的查询并不是以异常结束,而是返回None。

MongoDB shell版本:2.6.10

pymongo(2.8)

import pymongo
uri = "mongodb://localhost:27017"
client = pymongo.Connection(uri)["test"]
client.test.update({"name": "test"},{"$kset": {"value": "test_value"}})

为什么pymongo没有通过默认返回此类异常?

1 个答案:

答案 0 :(得分:1)

如果您使用的是PyMongo 2.8+,则不推荐使用pymongo.Connection

相反,您应该使用pymongo.MongoClient。如果您在代码中使用MongoClient,请执行以下操作:

 
client = pymongo.MongoClient(uri)["test"]

你应该得到一个OperationFailure异常,类似于下面的内容:

 
raise OperationFailure(error.get("errmsg"), error.get("code"), error)
pymongo.errors.OperationFailure: Unknown modifier: $kset

另请注意MongoDB v2.6 has reached end of life October 2016,您可能希望升级到当前的稳定版本,即MongoDB v3.2

另见Python Driver Compatibility versions