コレクション仲間がいます
- userId: user id
- Friends: array of user ids
そしてユーザー
- _id: userId
- Last Login
- Other User info fields
ユーザーが自分の Web サイトを閲覧している場合、最終ログイン フィールドは 5 分ごとに更新されます。
現在、友人コレクションから友人からユーザー ID を取得し、その ID を使用してユーザーコレクションをクエリしてユーザー情報を取得するロジックがあります。
追加: さらに、将来のリリースでは、ユーザーはユーザーだけでなく、他のコレクションからペットを追加できるようになるため、友人の埋め込み配列は {UserId, PetId} のようになります。
しかし、次のリリースでは、最終ログインで並べ替えられた友人を表示する新しい機能を追加したいと考えています。
私がうまくいくと思う解決策
- Map reduce on select - 実装は簡単ですが、パフォーマンスに問題がある可能性があります
- 更新時にマップを減らす - この場合、おそらくプロパティ「out」を使用して、更新ごとに新しいコレクションを書き込むので、必要なすべての情報を含む新しいコレクションFriend.reducedを作成し、インデックスで簡単にクエリできます
- {FriendId, LastUpdate} ロジックをビジネス レベルで簡単に実装できるように、新しいプロパティ Last Update をフレンド リスト コレクションに追加します。
私の問題を解決するための他のオプションは何ですか?