現在、nodejs と mongoDB を使用してチャット アプリを構築しています。
基本的に、データベースで維持する 2 つのコレクションがあります。
user = {
_id: ObjectId("1234"),
account: "stan123"
}
thread = {
_user: ObjectId("1234"),
messages: [
{
body:"hi"
_user:ObjectId("1234")
},
{
body:"second msg"
_user:ObjectId("1234")
}
]
}
すべての解決された情報 (ユーザー) を含むスレッド モデルをクライアント側に渡して、ウィジェットを構築できるようにする予定です。私はこれに対する解決策を探しました。データを取得するためにクライアント側から追加の呼び出しを行うことを提案する人もいます。ただし、メッセージの量が増えると、かなりの数の http 呼び出しが発生し、サイトの速度が低下するのではないかと心配しています。
一部のドライバーは DBRef を自動的に解決して、コードをきれいにすることができます。ただし、 http://docs.mongodb.org/manual/applications/database-references/によると
id を使用して参照を維持し、できるだけ単純にすることにしました。
私の計画は、サーバー側ですべての参照を解決することです。現在のアプローチは、最初にメッセージ配列の長さを取得しています。次に、メッセージ配列をループし、ユーザー情報を個別に解決する 2 番目のクエリを作成します。各クエリ コールバックで、messageToResolve++ および if(messageToResolve >= thread.messages.length) を実行します。
条件が満たされた場合、解決されたモデルをクライアントに送信し、応答を終了します。
これは、ユーザー データを更新する必要がある場合に面倒になるため、埋め込みとは見なされません。(スレッドが存在する場合のみ存在するため、メッセージが埋め込まれます)
それが良い方法かどうかはわかりません。誰かがより良い解決策を持っていますか?
問題と解決策を十分に明確に説明していない場合は申し訳ありません。そして、前もって感謝します。