私はこの単純なモデルを持っています:
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'))
ご覧のとおり、プログラムとエピソードの両方にコメントを付けることができます。最初はコメントを埋め込もうとしたのですが、壁にぶち当たりそうでした。そのため、代わりにコメントを Document クラスとして試しています。私の質問は、次のようにモデル化する方法です。
- 個人が削除されると、その人のコメントもすべて削除されます
- コメントが (直接的または間接的に) 削除されると、その親から削除されます
- プログラムまたはエピソードが削除されると、コメント オブジェクトも削除されます
私はMongoDB(さらに言えばSQLa)でこれらすべてを手動で行うことに慣れていますが、MongoEngineは初めてで、少し苦労しています。どんな助けでも素晴らしいでしょう!