2024-10-06 11:25:12 发布
网友
在MongoEngine中,从包含FileField的ListField中删除EmbeddedDocument时,引用的文件不会被删除。目前,我已经通过循环整个列表字段来解决这个问题。在
for embdoc in doc.embdocs: if embdoc.filtered == value: embdoc.dfile.delete() doc.update(pull__embdocs={'filtered': value})
我想知道有没有更好的办法。在
默认情况下,MongoDB不会检查数据的完整性,因此删除其他文档仍然引用的文档将导致一致性问题。在
您应该将ListField与ReferenceFields一起使用。ReferenceFields可与选项reverse_delete_rule=mongoengine.PULL或其他选项一起使用:
ListField
ReferenceFields
reverse_delete_rule=mongoengine.PULL
mongoengine什么都不做 这是默认设置,不会执行任何操作。删除速度很快,但可能会导致数据库不一致或引用挂起。在
mongoengine.拒绝 如果仍存在对要删除的对象的引用,则拒绝删除。在
mongoengine.NULLIFY 仍然引用被删除对象的任何对象字段都将被删除(使用MongoDB的“unset”操作),从而有效地使关系无效。在
mongoengine.CASCADE公司 首先删除包含引用要删除的对象的字段的任何对象。在
mongoengine拉 从ListField(ReferenceField)的任何对象字段中移除对对象的引用(使用MongoDB的“pull”操作)。在
默认情况下,MongoDB不会检查数据的完整性,因此删除其他文档仍然引用的文档将导致一致性问题。在
您应该将
ListField
与ReferenceFields
一起使用。ReferenceFields
可与选项reverse_delete_rule=mongoengine.PULL
或其他选项一起使用:mongoengine什么都不做 这是默认设置,不会执行任何操作。删除速度很快,但可能会导致数据库不一致或引用挂起。在
mongoengine.拒绝 如果仍存在对要删除的对象的引用,则拒绝删除。在
mongoengine.NULLIFY 仍然引用被删除对象的任何对象字段都将被删除(使用MongoDB的“unset”操作),从而有效地使关系无效。在
mongoengine.CASCADE公司 首先删除包含引用要删除的对象的字段的任何对象。在
mongoengine拉 从ListField(ReferenceField)的任何对象字段中移除对对象的引用(使用MongoDB的“pull”操作)。在
相关问题 更多 >
编程相关推荐