gpt4 book ai didi

node.js - 使用 MongoDB 跨多个集合进行基于范围的按时间顺序的分页查询?

转载 作者:可可西里 更新时间:2023-11-01 09:13:42 30 4
gpt4 key购买 nike

是否有一种有效的方法可以跨多个集合执行基于范围的查询,并按时间戳的索引排序?我基本上需要从 3 个集合中提取最新的 30 个文档,显而易见的方法是查询每个集合中的最新 30 个文档,然后过滤并合并结果。然而,这有点低效。

即使我只选择查询中的时间戳字段,然后对最新的 30 个文档进行第二批查询,我也不确定这是更好的方法。这将是每个分页请求 90 个文档(整个或单个字段)。

本质上,客户端可以订阅文章,每类文章有 0 - 2 个字段不同。我只选择了 3,因为这是到目前为止用户在 Beta 版中订阅的平均文章数。由于可能的领域差异,我认为将所有不同类型的文章放在一个集合中不会非常一致。

最佳答案

MongoDB 操作一次只能对一个集合进行操作。因此,您需要使用符合查询需求的集合来构建架构。

选项 A:从支持集合中获取 ID,加载完整文档,在内存中排序

因此您需要有一个集合,将 3 个集合的 ID、主要集合名称和时间戳组合成一个集合,并查询它以获取 30 个 ID/集合对,然后加载相应的完整文档有 3 个额外的查询(每个主集合 1 个),当然请记住,这些查询不会以正确的组合顺序返回,因此您需要在内存中手动对该页结果进行排序,然后再返回给您的客户。

{
_id: ObjectId,
updated: Date,
type: String
}

这种方式允许 mongo 为你做分页。

选项 B:3 个查询、联合、排序、限制

或者如您所说,从每个集合中加载 30 个文档,对内存中的并集进行排序,删除多余的 60 个,然后返回组合结果。这避免了额外的收集开销和同步维护。

所以我认为您当前的方法(我称之为选项 B)是这 2 个不太好的选项中较小的一个。

关于node.js - 使用 MongoDB 跨多个集合进行基于范围的按时间顺序的分页查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18475838/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com