我有一张字典清单
{'data': '[{"url":"https://example1.com/photos-reviews/","score":0.671},{"url":"https://example1.com/concerts-events/concert-organ-performances/2018-2019/","score":0.662},{"url":"https://www.example2.org/support-volunteer/orchestra-league/","score":0.645}]', 'type': 'invalid'}字段url是唯一的,并且基于字段type (无效或无效),mongodb中的字段hum_proc (默认为null )将分别更改为invalid或valid。
这是我做的
@sources_api.route('pending_val', methods=["GET", "POST"])
def pending_val():
if request.method=='POST':
data_rec = request.get_json()
if 'type' in data_rec:
data_list= json.loads(data_rec["data"])
for val in data_list:
MlData.objects(url=val["url"]).update_one(set__hum_proc=data_rec["type"])我正在迭代和更新每一项。是否可以在一个步骤中使用聚合管道更有效地更新?
发布于 2022-04-10 11:36:14
可以使用update()方法对查询匹配的字段执行原子更新:
MlData.objects(<your_query>).update(set__hum_proc=data_rec["type"])
更新:
update_one()方法覆盖或添加由查询匹配的第一个文档,而update()则对多个字段执行更新。
我知道您希望使用等效的url值从请求体更新type s。你几乎可以在一行中做到这一点:
MlData.objects(url__in=[e['url'] for e in data_rec['data']]).update(set__hum_proc=data_rec["type"])这里有几张便条。
首先,我修改了您的请求json,删除了data键中的多余引号,使其更具可读性:
data_rec = {'data': [{"url": "https://example1.com/photos-reviews/",
"score": 0.671},
{"url": "https://example1.com/concerts-events/concert-organ-performances/2018-2019/",
"score": 0.662},
{"url": "https://www.example2.org/support-volunteer/orchestra-league/",
"score": 0.645}],
'type': 'valid'}其次,我动态地从json创建了url列表,这最终允许我使用in查询操作符在数据库中找到这些确切的值。
https://stackoverflow.com/questions/71750489
复制相似问题