gpt4 book ai didi

python - 没有 objects.update() 的 Mongoengine 批量更新

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:04 25 4
gpt4 key购买 nike

我想批量更新 mongoengine 文档实例中的更改,但据我所知,model.objects.update(...) 进行了相同的更新 在符合条件的所有文档中。

例子:

entities = Foo.objects

result = entities.update(
set__foo='new bar',
upsert=True,
full_result=True)

这会将所有 foo 等于 bar 的文档的属性 foo 设置为 new bar。我想对每个文档进行不同的更改

这可能吗?像这样:

entities = Foo.objects

... # make changes to each entity in entities

entities = Foo.objects.update(entities)
# these entities were bulk updated in mongodb.

最佳答案

刚回到这里,以防万一有人遇到这个问题:mongoengine 并没有真正为我们提供任何方法来为许多记录批量进行不同的更新,但 pymongo 可以!有了它,我可以轻松地编写更新:

from pymongo import UpdateOne
from mongoengine import Document, ValidationError

class Foo(Document):
...

bulk_operations = []

for entity in entities:
try:
entity.validate()
bulk_operations.append(
UpdateOne({'_id': entity.id}, {'$set': entity.to_mongo().to_dict()}))

except ValidationError:
pass

if bulk_operations:
collection = Foo._get_collection() \
.bulk_write(bulk_operations, ordered=False)

在这里,我使用 _get_collection() 获取 Foo 的集合并执行 UpdateOne 操作列表 - 更新,因为它们被构建。

关于python - 没有 objects.update() 的 Mongoengine 批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com