代码之家  ›  专栏  ›  技术社区  ›  Bear Bile Farming is Torture

文件会按照复合索引的顺序返回吗?

  •  0
  • Bear Bile Farming is Torture  · 技术社区  · 3 年前

    假设这是我的MongoDB集合中的复合索引:

    {
      "age": 1,
      "income": 1,
    }
    

    所有返回的记录会先按年龄排序,然后按收入排序吗?

    2 回复  |  直到 3 年前
        1
  •  3
  •   Joe    3 年前

    这并不能保证。每个MongoDB节点都会按照遇到文档的顺序返回文档。这意味着,如果查询使用索引来选择文档,则会按照文档在索引中出现的顺序来遇到这些文档。

    只要数据库是单个节点或单个副本集,这将导致对结果进行排序。

    然而,如果这是在分片集群上运行的,则每个分片都将返回按索引排序的结果,但这些每个分片的结果集将在mongos中按它们碰巧到达的顺序进行组合。

    这意味着,当你的应用程序变得足够流行,以至于你不得不扩展到一个分片集群时,你的结果不再以稳定的顺序返回时,你可能会感到非常惊讶。

    从长远来看,向请求显式添加排序会更好。在单节点或单副本集的情况下,它不会给索引服务查询增加任何额外的开销,但有助于代码经得起未来验证。

    推荐文章