使用MongoDB 3.2.5匹配但不修改文档

时间:2016-04-25 08:39:40

标签: mongodb python-2.7 pymongo ubuntu-16.04

我在getJSON请求中收到500错误,该错误映射到包含带Python 2.7的MongoDB update的{​​{1}}函数。

$pull看到的上一个错误是:

sudo tail -f /var/log/apache2/error.log

处理此特定密钥的Python逻辑是带有[wsgi:error] [pid 1721:tid 140612911712000] [client 127.0.0.1:59078] KeyError: 'nModified', referer: http://localhost/control_room 的{​​{1}}:

update

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

$pull

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

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 部分中使用的WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) 值在数据库和函数中是一致的(即它们都是具有相同字符的字符串)。

一些想法:

  • 我刚刚将应用程序从entry_timestamp移动到$pull MongoDB环境,这可能会导致问题,但是,如果是这样,我还没有能够确定如何。
  • 2.6.11
  • 3.2.5的语法已更改
  • 集合上有许可问题阻止修改吗?
  • 我在$pull中运行3.2.5 - 也许它与MongoDB pymongo 2.6.2有些不兼容?

1 个答案:

答案 0 :(得分:0)

<强>解决方案

升级到virtualenv会导致错误:

3.2.5

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

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