当前位置: 首页 > 知识库问答 >
问题:

如何在查找结果时对mongo文档进行排序

陶高峯
2023-03-14

我有一个MongoDB集合,它有1000万个数据。我有两个主要字段(字符串类型)和级别(整数类型)。这两个字段都已编入索引,但是当我在 find 语句之后对结果进行排序时,mongo 需要花费大量时间来返回结果。

如何从find语句中快速排序结果?

db.collection.find({"domain":"DOMAIN_NAME"}).sort({"level":1})

共有1个答案

严宏朗
2023-03-14

从您的注释中可以看出,您已经创建了两个单独的索引:一个在上,一个在级别上。与该查询配对时,无法组合这些索引以支持排序。

从文件中:

sort()操作需要与查询谓词完全分离的索引时,索引交集不适用。

相反,您需要添加一个包含这两个字段的新复合索引,首先是字段,因为这是您要查询的:

db.collection.createIndex({domain: 1, level: 1})

您可以在此处了解有关MongoDB索引的更多信息。

 类似资料:
  • 我想从集合中选择最新的文档。这个问题的答案是mongodb:如何获取最后的N个记录?表明查询中的操作顺序很重要。然而,情况似乎并非如此(可能是在Mongo 2.4发布之后)。我尝试了以下两种查询,似乎Mongo首先应用了限制,然后执行排序。 查询1 问题2 告诉mongo先排序后限制的正确查询是什么? 编辑---这是一个样本文件从收集

  • 我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。

  • 如有任何帮助,不胜感激

  • 问题内容: 在对mysql查询进行排名时如何处理联系?在此示例中,我简化了表名和列,但它可以说明我的问题: 因此,假设上面的查询产生了: 即使Al和Amy的成绩相同,一个人的排名也比另一个高。艾米被偷走了。我如何才能使Amy和Al具有相同的排名,以使他们俩的排名都为1。而且,William和Mary没有参加考试。他们挤在教室里,在男孩的房间里抽烟。他们应该并列最后的位置。 正确的排名应该是: 如果

  • 这是我的密码。我做错了什么?我想在RecyclerView中显示降序结果。

  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast