MongoDB查询大型数据集

MongoDB查询大型数据集,mongodb,mongodb-query,spring-data-mongodb,Mongodb,Mongodb Query,Spring Data Mongodb,假设我有简单的文档结构,如: { "item": { "name": "Skittles", "category": "Candies & Snacks" } } 在我的搜索页面上,每当用户搜索产品名称时,我都希望按类别筛选选项 由于类别可以很多(比如50种类型),我无法在搜索结果旁边的侧栏上显示所有复选框。我只想在结果中显示那些与之关联的产品。所以,如果搜索结果中的任何产品都没有类别,则不要显示该类别选项

假设我有简单的文档结构,如:

    {
     "item": { 
          "name": "Skittles",
          "category": "Candies & Snacks"
     }
    }
在我的搜索页面上,每当用户搜索产品名称时,我都希望按类别筛选选项

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

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

我可以搜索和检索所有页面中的所有项目,然后解析类别。但如果我在一个页面中检索到数万个项目,速度会非常慢


有没有办法优化此查询?

您可以根据您的工作流程使用不同的方法,看看在您的情况下哪些方法最有效。解决方案的一些很好的候选者是

  • 在对大型数据集运行查询之前使用
  • 按照@Lucia的建议使用
  • 使用另一个数据存储(redis或mongo itself)存储类别的智能
  • 最后,根据您选择的方法和过滤器请求的流入,您可能需要考虑一些字段


    另外,关于聚合的工作原理,您是对的,除非您在第一阶段使用匹配筛选器,否则它将获取所有文档,然后应用到下一阶段。

    您可以使用聚合和groupby类别以及仅项目类别。[{$group:{{U id:$item.category}}]只投影类别会更快吗?你能解释一下它是如何在内部工作的吗?我想它还是会在所有页面中读取大量的对象吗?它必须阅读所有的文档才能正确分类?但唯一的问题是,所有这些都发生在DB层,它只返回找到的类别。
    [{$group: { _id: "$item.category" }}]