0

私はこの単純なモデルを持っています:

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 クラスとして試しています。私の質問は、次のようにモデル化する方法です。

  1. 個人が削除されると、その人のコメントもすべて削除されます
  2. コメントが (直接的または間接的に) 削除されると、その親から削除されます
  3. プログラムまたはエピソードが削除されると、コメント オブジェクトも削除されます

私はMongoDB(さらに言えばSQLa)でこれらすべてを手動で行うことに慣れていますが、MongoEngineは初めてで、少し苦労しています。どんな助けでも素晴らしいでしょう!

4

1 に答える 1

2

ロジックを処理するアプリケーション コードを記述しなければ、これらのすべてを実現できるわけではありません。いくつかのエッジケースを処理するためにシグナルを書きます。

あなたが抱えている主な問題は、グローバルな更新/削除が処理されないことです。そのため、データベースのクリーンな状態を確保するために、API に記述した API が使用されていることを確認する必要があります。

于 2012-12-07T08:52:41.263 に答える