mongoengine reverse_delete_rule在哪个方向工作?

时间:2015-05-21 10:59:39

标签: python mongodb mongoengine

如果我有以下两种型号:

class User(Document):
    ...

class Profile(Document):
    user = ReferenceField(reverse_delete_rule=CASCADE)

删除用户实例是否会删除其个人资料?删除其个人资料会删除用户吗?

documentation

中有接缝错误
class Employee(Document):
    ...
    profile_page = ReferenceField('ProfilePage', reverse_delete_rule=mongoengine.NULLIFY)
     

此声明   示例意味着当删除Employee对象时,ProfilePage   属于该员工的也被删除。如果整批   员工被删除,链接的所有个人资料页面都将被删除   好。

代码使用NULLIFY,但解释说明CASCADE的使用。或者我误解了什么?

1 个答案:

答案 0 :(得分:2)

删除用户实例会删除其个人资料。这是reverse_delete_rule=CASCADE的工作方式。就像在关系数据库中一样。

您可以查看此代码:

from mongoengine import connect, Document, ReferenceField, CASCADE


connect('test_cascade')


class User(Document):
    pass


class Profile(Document):
    user = ReferenceField(User, reverse_delete_rule=CASCADE)


user = User().save()
profile = Profile(user=user).save()

user.delete()

assert Profile.objects.count() == 0

他们还更新了文档,现在还有其他方法:

class ProfilePage(Document):
    ...
    employee = ReferenceField('Employee', reverse_delete_rule=mongoengine.CASCADE)
     

此示例中的声明表示当删除 Employee对象时,也会删除引用该员工的 ProfilePage 。如果删除了整批员工,则也会删除链接的所有个人资料页面。