ユーザーが記事を共有できるアプリケーションを作成しています。
現在、 が をuser
共有すると、共有アイテムの ID が で呼び出される配列にarticle
追加されます。article
shares
user
var userSchema = {
// `sharedItems` is a list of article IDs that the user has shared
sharedItems: { type: Array }
};
ただし、複数のユーザー ID について共有アイテムを照会する方法が必要なので (ニュース フィードの一種のクエリに似ています)、共有アイテム専用の別のコレクションを作成する方法に進むことにしました。
var shareSchema = {
// The ID of the user who shared the article
userId: { type: String },
// The ID of the article shared
articleId: { type: String },
dateCreated: { type: Date }
};
アプリケーション コードでこれを結び付けるために、 aが更新されると、 の配列が更新されuser
たかどうかがチェックされます。更新されている場合は、タスクがコレクションに委任され、一致するものをそれぞれ追加または削除します。これを行ったのは、ユーザーがアイテムを共有するときに、クライアント側のアプリケーションがリソースへのリクエストを作成するのではなく、リソースへのリクエストを作成することだけを気にする必要があるためです。ここでの問題は、私が複製に頼っていることであり、さまざまな理由で不正確な点があるのではないかと心配しています.sharedItems
user
shares
POST
user
POST
user
share
sharedItems
エンティティに配列が必要なのは、user
記事が読み込まれたときに、ログインしているユーザーによってどのアイテムが共有されたかをアプリケーションが検出する必要があるためです。私のアプリケーションは、ロードされたそれぞれの応答を解析し、現在の配列にその ID があるかどうかを確認します。ある場合は、のプロパティを記事に追加しarticle
ます。user
article
sharedItems
isShared
このすべてを達成するための他の唯一の代替手段 (私が考えることができる) はsharedItems
、ユーザー スキーマから配列を削除し、何らかの認証を API に追加して、リソースGET
への要求が現在のユーザーを認識できるようにすることです。ユーザーは、したがって、私のバックエンドは、クライアント側で解析を行う代わりにarticle
、現在のユーザーが応答で送信されたを共有しているかどうかを確認することを心配できます。article
これに関する問題は、API で認証を要求したくないことです。記事は、(リソースGET
上で)ログインまたはログアウトしているすべてのユーザーがアクセスできる必要があります。article
ただし、ログインしたユーザーのみが記事を共有できるようにしたい(POST
リソースshare
、または現在、共有ドキュメントの作成/削除POST
をuser
委任するリソースに)。
MongoDB のコレクションとスキーマに関して、これをどのように処理しますか?