【问题标题】:How to sort mongo documents on find results如何在查找结果上对 mongo 文档进行排序
【发布时间】:2018-10-22 12:21:27
【问题描述】:

我有一个包含 1000 万条数据的 MongoDB 集合。我有两个主要字段domain(字符串类型)和level(整数类型)。这两个字段都被索引了,但是当我在 find 语句之后对结果进行排序时,mongo 需要很长时间才能返回结果。

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

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

【问题讨论】:

  • 什么是Cr?此集合是否已分片?
  • 使用 .explain() (docs.mongodb.com/manual/reference/method/cursor.explain) 将有助于了解 Mongo 是如何实际执行您的查询的,当索引和速度发挥作用时,这通常是很好的第一步
  • @VenkataNaresh 什么是千万?什么是十万?
  • 您说“两个字段都已编入索引”,但除非您定义了{domain: 1, level: 1} 的一个复合索引,否则排序将无法使用索引。您能否更新您的问题以显示db.collection.getIndexes() 的输出?
  • 请不要使用印度单词(如 crore),绝对不要使用印度单词的缩写。

标签: mongodb


【解决方案1】:

从您的 cmets 看来,您已经创建了两个单独的索引:一个在 domain 上,一个在 level 上。与该查询配对时,这些索引无法组合以支持您的排序。

来自the docs

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

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

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

您可以了解更多关于 MongoDB 索引的信息here

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 2013-09-30
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多