拉入更新 MongoDB 3.2.5 匹配但不修改文档
Update with pull in MongoDB 3.2.5 matching but not modifying document
我在 getJSON
请求上收到 500 错误,该请求映射到包含 MongoDB update
和 $pull
的 Python 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
值在数据库和函数中是一致的(即它们都是具有相同字符的字符串)。
一些想法:
- 我刚刚将应用程序从
2.6.11
环境移至 3.2.5
MongoDB 环境,这可能是导致问题的原因,但如果是这样,我还没有能够确定如何呢。
$pull
的语法在 3.2.5
? 中发生了变化
- collection 存在权限问题,无法修改?
- 我是 运行
pymongo 2.6.2
在 virtualenv
- 也许它与 MongoDB 3.2.5
有一些不兼容?
解决方案
升级到 pymongo 3.2.2
导致错误:
ServerSelectionTimeoutError: No servers found yet
不过,我升级到pymongo 2.8
,重启了apache,问题好像解决了。
我在 getJSON
请求上收到 500 错误,该请求映射到包含 MongoDB update
和 $pull
的 Python 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
值在数据库和函数中是一致的(即它们都是具有相同字符的字符串)。
一些想法:
- 我刚刚将应用程序从
2.6.11
环境移至3.2.5
MongoDB 环境,这可能是导致问题的原因,但如果是这样,我还没有能够确定如何呢。 $pull
的语法在3.2.5
? 中发生了变化
- collection 存在权限问题,无法修改?
- 我是 运行
pymongo 2.6.2
在virtualenv
- 也许它与 MongoDB3.2.5
有一些不兼容?
解决方案
升级到 pymongo 3.2.2
导致错误:
ServerSelectionTimeoutError: No servers found yet
不过,我升级到pymongo 2.8
,重启了apache,问题好像解决了。