python - MongoDB 更新:我无法使用烧瓶 API 更新 MongoDB 中的文档
问题描述
我想更新 mongoDB 中的文档月份。例如将"month": "June"
文档"month": "May"
中的"truck_id": "A01"
这是我在 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
我知道我在这里做的很多事情可能都是错误的,我可能会以不好的方式问我的问题,但我不知道如何解决这个问题。
解决方案
使用 replace_one()
而不是 update_one()
. 的第三个参数 replace_one()
是 upsert
。
SampleTable.replace_one(object_id, object_update, True)
引发异常是因为您没有指定任何更新运算符,例如$set
.
推荐阅读
- javascript - React中的JSX函数不返回数据?
- sql - PostgreSQL Json_build_object / json_agg 添加聚合级别
- react-native - Redux Saga 动态动作类型?
- wordpress - 直接在 HTTPS 中安装 WordPress(已经安装了 SSL)
- ios - Ionic 5 + cordova-background-geolocation-lt:iOS App Terminates,延迟唤醒后台服务
- r - 绘制 all_simple_paths (igraph, R) 的结果
- azure - Azure 存储帐户防火墙规则阻止使用 azure devops 进行 terraform 部署
- spring - 在spring boot aws中外部化配置
- r - 如何填充ggplot图中两条曲线之间的间隙
- ffmpeg - 关于H.264中PTS和DTS关系的问题