如何使用MongoEngine在此场景中级联删除?

时间:2012-12-06 22:53:15

标签: python mongodb mongoengine

我有这个简单的模型:

from mongoengine import *
from datetime import datetime

class Person(Document):
    firstname = StringField(required=True)

    @property
    def comments(self):
        return Comment.objects(author=self).all()

class Comment(Document):
    text = StringField(required=True)
    timestamp = DateTimeField(required=True, default=datetime.now())
    author = ReferenceField('Person', required=True, reverse_delete_rule=CASCADE)

class Program(Document):
    title = StringField(required=True)
    comments = ListField(ReferenceField('Comment'))

class Episode(Document):
    title = StringField(required=True)
    comments = ListField(ReferenceField('Comment'))

如您所见,节目和剧集都可以有评论。最初,我试图嵌入评论,但我似乎陷入了困境。所以我正在尝试将Comments作为Document类。我的问题是,我如何对其进行建模以便:

  1. 当删除一个人时,所有他们的评论都是
  2. 删除评论(直接或间接)时,将从其父级
  3. 中删除
  4. 删除程序或剧集时,“评论对象”
  5. 也会被删除

    我习惯在MongoDB中手动执行所有这些操作(和SQLa一样),但我是MongoEngine的新手,我有点挣扎。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

如果不编写应用程序代码来处理逻辑,并非所有这些都是可能的。我会写信号来处理一些边缘情况。

您遇到的主要问题是未处理全局更新/删除 - 因此您必须确保使用您在api中编写的API,以确保数据库状态干净。