我正在使用 PHP 和 MongoDB 开发一个 webapp。在这个应用程序中,我保留了两个集合。一个用于保存有关文件的数据,另一个用于跟踪每个文件的下载事件。
我需要获取 10 个最新下载的文件,但我知道加入不是一个选项。事件文档仅存储文件 id,其他集合存储缩略图。
现在我首先获取最近下载的 10 个文件并按日期排序,顺序很好,但随后我使用这个文件数组(它们的 id)并进行 where_in 查询,在其中查找 ids 数组中存在的文件. 这也很好用(我得到了所选文件的缩略图),但我不能再保留订单了。最近下载的文件不再位于顶部。
如何在不循环遍历它们的情况下保持 id 的顺序,从而进行 10 个新查询而不是一个?
我无法更改架构,因为我有超过 40.000 个文档 :)
更新
简而言之,这就是我想要做的:
- 获取最近下载的 10 个文件的所有 ID。按下载时间戳排序。
- 使用这个 ID 数组并查询文件集合并获取每个文件的详细信息,如缩略图、说明等。
上述步骤工作正常,但我无法保持第一步的顺序,因此我无法获得最近下载的文件。我知道我可以查看 id 数组并获取每个文件的数据,但这将花费我 10 个查询而不是一个。