ケース: システムにユーザーがいて、静的なドキュメント (本など) がある 各ユーザーはいくつかのドキュメントを操作し、ドキュメントごとに特定の状態/設定 (ドキュメント内の現在の位置/ページ、ブックマーク/メモなど) を持っている場合があります。
userId と documentId の 2 つのキー、または userId に等しい _id と documentId に等しい _id を持つサブドキュメントのネストされた配列を持つコレクション (そのシナリオでは、コレクションも使用されます非ドキュメント固有のユーザー データを格納する)?
最初のシナリオ: find({userId: ..., documentId:...})
2 番目のシナリオ: findBy({_id:...})、次に documentId と等しい _id を持つサブドキュメントを検索
最初のシナリオの長所:
1) 検索と保存の操作が速くなると思います。
最初のシナリオの短所:
1) 書類の量が増える
2) ドキュメントに関連しないユーザー固有のデータをコレクションに保存する方法がない
2番目のシナリオの長所:
1)データ関係のより良い表現(主観的ですが)
2) 同じコレクションを使用して、特定のドキュメントに関連しない他のユーザー データを格納することができます。
2番目の短所:
1)検索と保存操作がより困難になり(私はMongoose ODMを使用しており、コードは複雑ではありません)、操作は最初のシナリオよりも速度が遅いと思います。
考慮すべき事項:
1)一般的に、読み取り操作では、ドキュメント固有のデータを1つだけ選択します
2) 1 つのドキュメント固有のデータを頻繁に保存する必要があります (たとえば、ユーザーが作業しているドキュメント内の位置を定期的に保存するなど)。
3)ユーザー/ドキュメントの状態には、変更する必要があるネストされた配列(ブックマーク、メモ)が含まれる場合があります(ドキュメントの挿入/削除)
この点を考慮すると、最初のシナリオの方がタスクに適していると言えますが、2 つのシナリオが大きく異なるかどうか、プロの意見を聞きたいと思います。