【问题标题】:MongoDB update: I can't update my documents in MongoDB with flask APIMongoDB 更新:我无法使用烧瓶 API 更新 MongoDB 中的文档
【发布时间】:2021-12-25 06:03:43
【问题描述】:

我想更新 mongoDB 中文档的月份。例如在具有"truck_id": "A01"的文档中将"month": "June"更改为"month": "May"

这是我在 MongoDB 中的文档:

{
"0": {
    "available": "no",
    "end_date": "10",
    "month": "June",
    "start_date": "15",
    "truck_id": "A01"
},
"1": {
    "available": "yes",
    "end_date": null,
    "month": "June",
    "start_date": null,
    "truck_id": "A02"
}

}

这是我的 API 中的代码:

@app.route('/update', methods=["PUT"])
    def updateElement():
        object_id = request.get_json()
        object_update = request.get_json()
        query = SampleTable.update_one(object_id, object_update)
        return jsonify(query)

当我尝试用 postman 测试我的 API 时,我在 postmans raw body tester 中写了这个:

{
   "0":{  
      "truck_id":"A01"
   },
      "$set":{
         "month":"May"
      }
}

但是当我尝试这个时得到错误:

Traceback (most recent call last):
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2091, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2076, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1518, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1516, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1502, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "D:\Dev\api_test\appi\app.py", line 29, in updateElement
    query = SampleTable.update_one(object_id, object_update)
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\pymongo\collection.py", line 1023, in update_one
    common.validate_ok_for_update(update)
  File "C:\Users\umut8\AppData\Local\Programs\Python\Python310\Lib\site-packages\pymongo\common.py", line 567, in validate_ok_for_update
    raise ValueError('update only works with $ operators')
ValueError: update only works with $ operators

我知道我在这里做的很多事情可能都是错误的,我可能会以不好的方式问我的问题,但我不知道如何解决这个问题。

【问题讨论】:

    标签: python json mongodb flask


    【解决方案1】:

    使用replace_one() 而不是update_one()replace_one() 的第三个参数是 upsert

    SampleTable.replace_one(object_id, object_update, True)
    

    引发异常是因为您没有指定任何update operator,例如$set.

    【讨论】:

    • 但是我如何在邮递员中测试它。我对 JSON 不太熟悉,所以我不知道如何让一个 JSON 对象到 ---object_id = request.get_json()--- 和另一个到 ----object_update = request.get_json() - ----
    猜你喜欢
    • 2020-09-26
    • 2020-10-13
    • 2015-02-21
    • 1970-01-01
    • 2016-01-07
    • 2017-06-21
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多