无法用Pymongo更新文档

时间:2018-03-01 14:55:29

标签: python-3.x pymongo crud

我有一个JSON POST数据,用户每次都会从第三方服务中获取一些数据。我计划根据user_id缓存数据,这样我就不会每次都插入数据用户请求某事.Below是用户每次都要发送给我的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

但是我一直将相同的数据插入到我的数据库中并且更新似乎不起作用。我该如何解决这个问题?

注意:这是一个烧瓶应用程序,我建议不要深入了解实现的细节。我只需要每次更新给定的POST数据而不是插入它。

1 个答案:

答案 0 :(得分:1)

更新查询中使用的选择器 p1.AxisLabel = log.ReportName; 永远不会匹配任何现有文档。

这是因为它会检查{'scope_id': [tool_id, api_id, input_params, datetime.now().strftime('%Y-%m-%d %H:%M:%S')]}是由当前时间组成的数组的文档。

使用:

scope_id