0

我正在使用 PHP 和 MongoDB 开发一个 webapp。在这个应用程序中,我保留了两个集合。一个用于保存有关文件的数据,另一个用于跟踪每个文件的下载事件。

我需要获取 10 个最新下载的文件,但我知道加入不是一个选项。事件文档仅存储文件 id,其他集合存储缩略图。

现在我首先获取最近下载的 10 个文件并按日期排序,顺序很好,但随后我使用这个文件数组(它们的 id)并进行 where_in 查询,在其中查找 ids 数组中存在的文件. 这也很好用(我得到了所选文件的缩略图),但我不能再保留订单了。最近下载的文件不再位于顶部。

如何在不循环遍历它们的情况下保持 id 的顺序,从而进行 10 个新查询而不是一个?

我无法更改架构,因为我有超过 40.000 个文档 :)

更新

简而言之,这就是我想要做的:

  1. 获取最近下载的 10 个文件的所有 ID。按下载时间戳排序。
  2. 使用这个 ID 数组并查询文件集合并获取每个文件的详细信息,如缩略图、说明等。

上述步骤工作正常,但我无法保持第一步的顺序,因此我无法获得最近下载的文件。我知道我可以查看 id 数组并获取每个文件的数据,但这将花费我 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 回答