Python 从ListField中删除带有FileField的嵌入文档
在MongoEngine中,从包含文件字段的列表字段中删除嵌入文档时,引用的文件不会被删除。目前,我已经通过在整个列表字段上循环解决了这个问题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不会检查数据的完整
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?