MongoDB查询大型数据集

时间:2019-10-14 23:58:03

标签: mongodb mongodb-query spring-data-mongodb

让我们说我有一个简单的文档结构,例如:

    {
     "item": { 
          "name": "Skittles",
          "category": "Candies & Snacks"
     }
    }

在我的搜索页面上,每当用户搜索产品名称时,我都希望有一个按类别的过滤器选项。

由于类别可能很多(例如50种类型),因此无法在侧边栏上显示搜索结果旁边的所有复选框。我只想在结果中显示与之相关的产品。因此,如果搜索结果中的所有产品都没有类别,则不要显示该类别选项。

现在,将按名称本身对项目搜索进行分页。我在一个页面中只显示30个项目。而且我们的数据库中有成千上万的项目。

我可以搜索和检索所有页面中的所有项目,然后解析类别。但是,如果我在一页中检索成千上万的项目,那将真的很慢。

有没有优化此查询的方法?

1 个答案:

答案 0 :(得分:0)

您可以根据工作流程使用不同的方法,并查看哪种方法最适合您的情况。

  1. 在大型数据集上运行查询之前,先使用distinct
  2. 按照@Lucia的建议使用Aggregation Pipeline
[{$group: { _id: "$item.category" }}] 
  1. 使用另一个数据存储区(redis或mongo本身f)将情报存储在类别中

最后,根据您选择的方法和过滤器请求的流入,您可能需要考虑indexing一些字段

P.S。您对聚合的工作方式是正确的,除非您将匹配过滤器作为第一阶段,否则它将获取所有文档,然后应用于下一阶段。

相关问题