django、backbone.js、tastypie、mongodb を使用して Web アプリケーションを開発しています。Tastypie と Django を mongodb に適合させるために、django-mongodb-engine と Tastypie-nonrel を使用しています。このアプリケーションには、タスクのリストを持つモデル プロジェクトがあります。したがって、次のようになります。
class Project(models.Model):
user = models.ForeignKey(User)
tasks = ListField(EmbeddedModelField('Task'), null=True, blank=True)
class Task(models.Model):
title = models.CharField(max_length=200)
Tastypie-nonrel のおかげで、/api/v1/project/:id:/tasks/ で GET リクエストを使用して、プロジェクトのタスクのリストを簡単に取得できます。
ここで、この Task モデルをコメントのリストで拡張したいと思います。
class Task(models.Model):
title = models.CharField(max_length=200)
comments = ListField(EmbeddedModelField('Comment'), null=True, blank=True)
class Comment(models.Model):
text = models.CharField(max_length=1000)
owner = models.ForeignKey(User)
この実装の問題点は、tastypie-nonrel が別のネストをサポートしていないため、コメントを /api/v1/project/:id:/task/:id:/comments/ に単純に POST できないことです。
別の方法として、Task の PUT リクエストを /api/v1/project/:id:/task/ に送信することもできますが、2 人のユーザーが同じ Task に同時にコメントを追加しようとすると問題が発生します。最後の PUT は前のものをオーバーライドします。
最後の選択肢 (tastypie-nonrel を変更する以外) は、Task 内に Comment を埋め込まず、ForeignKey のみを保持することです。これにより、リクエストは /api/v1/Comment/ に移動します。私の質問は、これがMongoDBを使用する利点を損なうかどうかです(クロスクエリが必要なため)? それを行うより良い方法はありますか?
私はスタックのどのテクノロジーについてもほとんど経験がないため、問題にうまく焦点を合わせていない可能性があります。どんな提案でも大歓迎です。