PHP と MongoDB を使用して Web アプリケーションを開発しています。このアプリでは、2 つのコレクションを保持しています。1 つはファイルに関するデータを保持し、もう 1 つは各ファイルのダウンロード イベントを追跡します。
10 個の最新のダウンロード ファイルを取得する必要がありますが、結合がオプションではないことはわかっています。イベント ドキュメントにはファイル ID のみが保存され、他のコレクションにはサムネイルが保存されます。
現在、最初に最近ダウンロードした 10 個のファイルを取得し、日付順に並べ替えますが、順序は問題ありませんが、このファイルの配列 (それらの ID) を使用して、ids 配列に存在する ID を持つファイルを探す where_in クエリを作成します。 . これも問題なく動作します (選択したファイルのサムネイルを取得します) が、順序を維持できなくなりました。最近ダウンロードしたファイルが一番上に表示されなくなりました。
ID をループせずに ID の順序を維持して、1 つではなく 10 個の新しいクエリを作成するにはどうすればよいですか?
40.000 を超えるドキュメントを取得したため、スキーマを変更できません :)
アップデート
要するに、これは私がやりたいことです:
- 最近ダウンロードした 10 個のファイルのすべての ID を取得します。ダウンロードのタイムスタンプ順に並べ替えます。
- この ID の配列を使用してファイル コレクションにクエリを実行し、サムネイル、説明などの各ファイルの詳細を取得します。
上記の手順は正常に機能しますが、最初の手順からの順序を維持できないため、最後にダウンロードしたファイルを一番上に取得できません。ID配列を調べて各ファイルのデータを取得できることはわかっていますが、1回ではなく10回のクエリが必要になります。