正在从ListField中删除带有FileField的EmbeddedDocument

2024-10-06 11:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在MongoEngine中,从包含FileField的ListField中删除EmbeddedDocument时,引用的文件不会被删除。目前,我已经通过循环整个列表字段来解决这个问题。在

for embdoc in doc.embdocs:
    if embdoc.filtered == value:
        embdoc.dfile.delete()
doc.update(pull__embdocs={'filtered': value})

我想知道有没有更好的办法。在


Tags: 文件in列表fordocifvaluefiltered
1条回答
网友
1楼 · 发布于 2024-10-06 11:25:12

默认情况下,MongoDB不会检查数据的完整性,因此删除其他文档仍然引用的文档将导致一致性问题。在

您应该将ListFieldReferenceFields一起使用。ReferenceFields可与选项reverse_delete_rule=mongoengine.PULL或其他选项一起使用:

mongoengine什么都不做 这是默认设置,不会执行任何操作。删除速度很快,但可能会导致数据库不一致或引用挂起。在

mongoengine.拒绝 如果仍存在对要删除的对象的引用,则拒绝删除。在

mongoengine.NULLIFY 仍然引用被删除对象的任何对象字段都将被删除(使用MongoDB的“unset”操作),从而有效地使关系无效。在

mongoengine.CASCADE公司 首先删除包含引用要删除的对象的字段的任何对象。在

mongoengine拉 从ListField(ReferenceField)的任何对象字段中移除对对象的引用(使用MongoDB的“pull”操作)。在

相关问题 更多 >