Python 3.x 无法使用Pymongo更新文档
我有一个JSON POST数据,用户每次都会发送给我,以便从第三方服务获取一些数据。我计划根据用户id缓存数据,这样我就不会在用户每次请求某些内容时都不断插入数据。下面是用户每次都要发送给我的POST数据Python 3.x 无法使用Pymongo更新文档,python-3.x,pymongo,crud,Python 3.x,Pymongo,Crud,我有一个JSON POST数据,用户每次都会发送给我,以便从第三方服务获取一些数据。我计划根据用户id缓存数据,这样我就不会在用户每次请求某些内容时都不断插入数据。下面是用户每次都要发送给我的POST数据 { "scope_id": "user1", "tool_id": "appdynamics", "api_id": "get metrics", "input_params": {"user": "*********", "pw
{
"scope_id": "user1",
"tool_id": "appdynamics",
"api_id": "get metrics",
"input_params": {"user": "*********", "pwd": "*********", "acc_id": "**********", "app_id": "TestApp", "metric-path": "ars",
"time-range-type": "BEFORE_NOW", "duration-in-mins": 60},
"output_filters": {}
}
下面是我用来处理数据更新的代码
def post(self, name):
data = ServiceAPI.parser.parse_args()
print("First data", data)
scope_id = data["scope_id"]
tool_id = data["tool_id"]
api_id = data["api_id"]
input_params = data["input_params"]
output_filter = data["output_filter"]
# if the user passes the credentials, insert it into the database otherwise use the last known credentials
# ensure you only insert valid credentials
if all([scope_id, tool_id, api_id]) and all([input_params.values()]):
users.update({scope_id: [tool_id, api_id, input_params, datetime.now().strftime('%Y-%m-%d %H:%M:%S')]},
{scope_id: [tool_id, api_id, input_params, datetime.now().strftime('%Y-%m-%d %H:%M:%S')]}, upsert=True)
print("Cache", list(users.find({})))
status_code, response = api_executor(scope_id, tool_id, api_id)
if status_code == 200:
return {"message": response}, status_code
return {"message": "Please enter correct credentials"}, status_code
但是,我不断地将相同的数据插入到数据库中,更新似乎不起作用。我如何修复此问题
注意:这是一个flask应用程序,我建议不要讨论实现的细节。我只需要每次更新给定的POST数据,而不是插入它。更新查询中使用的选择器,即{'scope_id':[tool_id,api_id,input_params,datetime。现在,strftime“%Y-%m-%d%H:%m:%S']}与任何现有文档都不匹配 这是因为它会检查其scope_id是由当前时间组成的数组的文档 使用:
selector = {'scope_id': {'$all': [tool_id, api_id, input_params]}}
update = {
'scope_id': [
tool_id, api_id, input_params,
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
]
}
users.update(selector, update, upsert=True)