Python 从ListField中删除带有FileField的嵌入文档

Python 从ListField中删除带有FileField的嵌入文档,python,mongodb,mongoengine,listfield,Python,Mongodb,Mongoengine,Listfield,在MongoEngine中,从包含文件字段的列表字段中删除嵌入文档时,引用的文件不会被删除。目前,我已经通过在整个列表字段上循环解决了这个问题 for embdoc in doc.embdocs: if embdoc.filtered == value: embdoc.dfile.delete() doc.update(pull__embdocs={'filtered': value}) 我想知道是否有更好的方法来做到这一点。默认情况下,MongoDB不会检查数据的完整

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

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

我想知道是否有更好的方法来做到这一点。

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

您应该将
ListField
ReferenceFields
一起使用
ReferenceFields
可与选项
reverse\u delete\u rule=mongoengine.PULL
或其他选项一起使用:

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

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

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

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

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

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

您应该将
ListField
ReferenceFields
一起使用
ReferenceFields
可与选项
reverse\u delete\u rule=mongoengine.PULL
或其他选项一起使用:

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

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

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

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

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

因此,基本上你是说,我应该使用ReferenceField并使用另一个集合来保存该信息,而不是使用EmbeddedDocumentField,基本上你是说,我应该使用ReferenceField并使用另一个集合来保存信息,而不是使用EmbeddedDocumentField?