pau*_*kon 5 pagination mongoose mongodb node.js
有没有一种有效的方法可以对多个集合进行基于范围的查询,并按时间戳上的索引排序?我基本上需要从3个集合中提取最新的30个文档,最明显的方法是查询每个集合中的最新30个文档,然后过滤并合并结果。但是,这有点低效。
即使我只选择查询中的“时间戳”字段,然后对最近的30个文档进行第二批查询,我也不确定这是一个更好的方法。每个分页请求将是90个文档(整个或单个字段)。
本质上,客户可以订阅文章,并且文章的每个类别之间的差异为0-2。我刚刚选择了3个,因为那是到目前为止Beta中用户已订阅的平均文章数。由于可能存在字段差异,我认为将所有不同类型的文章放在一个集合中并不是很一致。
MongoDB 操作一次只对一个集合进行操作。因此,您需要使用符合您的查询需求的集合来构建架构。
因此,您需要一个集合,将 3 个集合的 ids、主集合名称和时间戳合并到一个集合中,并查询该集合以获取 30 个 ID/集合对,然后加载相应的完整文档以及 3 个附加文档查询(每个主集合 1 个),当然请记住,这些查询不会以正确的组合顺序返回,因此您需要在内存中手动对该结果页进行排序,然后再将其返回给客户端。
{
_id: ObjectId,
updated: Date,
type: String
}
Run Code Online (Sandbox Code Playgroud)
这种方式允许 mongo 为你做分页。
或者正如您所说,从每个集合中加载 30 个文档,对内存中的并集进行排序,删除多余的 60 个文档,然后返回组合结果。这避免了额外的收集开销和同步维护。
所以我认为你目前的方法(我称之为选项 B)是这两个不太好的选项中较小的一个。
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |