我有一个类似的字典列表
{'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"])
我正在迭代和更新每一项。是否可以使用聚合管道或在一个步骤中更有效地更新这一点
您可以使用update()
方法对查询匹配的字段执行原子更新:
MlData.objects(<your_query>).update(set__hum_proc=data_rec["type"])
更新:
update_one()
方法覆盖或添加查询匹配的第一个文档,而update()
对多个字段执行更新。
我知道你想用等效的type
值更新请求正文中的url
。你可以在一行中做到这一点:
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
查询运算符在数据库中找到这些精确的值。