拉入更新 MongoDB 3.2.5 匹配但不修改文档

Update with pull in MongoDB 3.2.5 matching but not modifying document

我在 getJSON 请求上收到 500 错误,该请求映射到包含 MongoDB update$pullPython 2.7 函数。

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 逻辑是 update$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 })

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

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

一些想法:

解决方案

升级到 pymongo 3.2.2 导致错误:

ServerSelectionTimeoutError: No servers found yet

不过,我升级到pymongo 2.8,重启了apache,问题好像解决了。