次のデータストアモデルがあります。私は何をしたいのか、基本的にAppengineのKeyプロパティで接続されたエンティティに接続されているエンティティをすべて削除する方法
class UserDetail(ndb.Model):
name=ndb.StringProperty(required=True)
password=ndb.StringProperty(required=True)
email=ndb.StringProperty(required=False)
posts=ndb.KeyProperty(kind='Post',repeated=True)
class Post(ndb.Model):
subject=ndb.StringProperty(required=True)
content=ndb.TextProperty(required=True)
created=ndb.DateTimeProperty(auto_now_add=True)
user=ndb.KeyProperty(kind='UserDetail')
comments=ndb.KeyProperty(kind='Comment',repeated=True)
class Comment(ndb.Model):
body=ndb.StringProperty(required=True)
user=ndb.KeyProperty(kind='UserDetail')
post=ndb.KeyProperty(kind='Post')
私は投稿を削除する場合、そのすべてのコメントが削除されますする必要があり、ポストも私は知っているUserDetail model.Theの道からユーザーのポストリストから削除されるはずですpost.Andを削除することです削除するには、投稿を削除し、指定された投稿IDでコメントモデルを検索し、それらのすべてを削除し、同じ方法でユーザの投稿リストに行き、必要な投稿を削除します。 これを行うにはより良い方法がありますか?
サイドコメント: 'UserDetail'の' posts'プロパティと 'Post'の' comments'プロパティを削除します。スケーラビリティの問題です。追加/削除するたびにそれらのエンティティを書き直さなければなりません。それらのリスト内の要素を削除します。そして、これらのリストに追加/削除されなければならない要素の作成/削除のロジックが複雑になります。このリストをオンデマンドでクエリで得ることができます(最終的な一貫性のため実際にはこの使用例の問題です)。 –
このモデルスキーマを作成したのは、私が使用していないという事実を補うためですリレーショナルデータベースつまり、ユーザーのプロフィールページを作成して、このスキーマを投稿したユーザー全員を表示したいのであれば、私はあなたが何を言っているかを簡単にどのように達成するのか分かりません。 –