0

我在映射到包含 MongoDB 的函数的getJSON请求时收到 500 错误。 Python 2.7update$pull

看到的最后一个错误sudo tail -f /var/log/apache2/error.log是:

[wsgi:error] [pid 1721:tid 140612911712000] 
[client 127.0.0.1:59078] 
KeyError: 'nModified', referer: http://localhost/control_room

处理这个特定键的 Python 逻辑是updatewith $pull

update_with_pull = collection.update({"user_email":user_email,"top_level.year":entry_year,"top_level.month":entry_month}, { "$pull": {dynamic_nested_key: {"timestamp":entry_timestamp}}})

之后的条件是尝试捕获文档是否已被修改:

if update_with_pull['nModified'] == 1:
  #do stuff

我在 mongo shell 中测试了相同的操作,它返回:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

所以它似乎与查询匹配,但没有做任何修改。

为了进一步排除故障,上一节entry_timestamp中使用的值$pull在数据库和函数中是一致的(即它们都是具有相同字符的字符串)。

一些想法:

  • 我刚刚将应用程序从 a 移动2.6.113.2.5MongoDB 环境,这可能会导致问题,但是,如果是这样,我还不能确定是怎么回事。
  • 的语法$pull3.2.5?
  • 集合上存在阻止修改的权限问题?
  • 我正在运行pymongo 2.6.2-virtualenv也许它与 MongoDB 有一些不兼容3.2.5
4

1 回答 1

0

解决方案

升级到pymongo 3.2.2导致错误:

ServerSelectionTimeoutError: No servers found yet

https://stackoverflow.com/a/31194981/1063287

但是,我升级到pymongo 2.8,重新启动 apache,问题似乎解决了。

于 2016-04-25T08:39:40.467 回答