Python 3.x 无法使用Pymongo更新文档

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

我有一个JSON POST数据,用户每次都会发送给我,以便从第三方服务获取一些数据。我计划根据用户id缓存数据,这样我就不会在用户每次请求某些内容时都不断插入数据。下面是用户每次都要发送给我的POST数据

{
        "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)