0

PHP と MongoDB を使用して Web アプリケーションを開発しています。このアプリでは、2 つのコレクションを保持しています。1 つはファイルに関するデータを保持し、もう 1 つは各ファイルのダウンロード イベントを追跡します。

10 個の最新のダウンロード ファイルを取得する必要がありますが、結合がオプションではないことはわかっています。イベント ドキュメントにはファイル ID のみが保存され、他のコレクションにはサムネイルが保存されます。

現在、最初に最近ダウンロードした 10 個のファイルを取得し、日付順に並べ替えますが、順序は問題ありませんが、このファイルの配列 (それらの ID) を使用して、ids 配列に存在する ID を持つファイルを探す where_in クエリを作成します。 . これも問題なく動作します (選択したファイルのサムネイルを取得します) が、順序を維持できなくなりました。最近ダウンロードしたファイルが一番上に表示されなくなりました。

ID をループせずに ID の順序を維持して、1 つではなく 10 個の新しいクエリを作成するにはどうすればよいですか?

40.000 を超えるドキュメントを取得したため、スキーマを変更できません :)

アップデート

要するに、これは私がやりたいことです:

  1. 最近ダウンロードした 10 個のファイルのすべての ID を取得します。ダウンロードのタイムスタンプ順に並べ替えます。
  2. この ID の配列を使用してファイル コレクションにクエリを実行し、サムネイル、説明などの各ファイルの詳細を取得します。

上記の手順は正常に機能しますが、最初の手順からの順序を維持できないため、最後にダウンロードしたファイルを一番上に取得できません。ID配列を調べて各ファイルのデータを取得できることはわかっていますが、1回ではなく10回のクエリが必要になります。

4

1 に答える 1

1

私は本当にあなたの問題を理解していません。ここにいくつかの擬似コードがあります:

// get last N download events
events = get_latest_downloads() 

// retrieve associated file data
file_array = get_all_file_info_by_events(events)

display_data = []
for(e in events) {
  data = find_file_info_in_the_array(file_array, e.file_id)
  display_data.push(data)
}

// now display_data is contains full file info, sorted by download time.
于 2012-06-14T13:08:04.367 に答える