对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

哈希(Hashed)索引

哈希索引收集并存储索引字段值的哈希值。

哈希索引支持使用哈希分片键分片基于哈希的分片使用字段的哈希索引作为分片键,在分片集群中对数据分区。

哈希索引非常适合具有像 ObjectId 值或时间戳这样单调变化字段的分片键。当您使用具有单调递增分片键值的范围分片时,上限为 MaxKey 的块将接收大多数传入写入。此行为将插入操作限制为单个分片,从而消除了分片集群中分布式写入的优势。

有关为应用程序选择最佳分片方法的更多信息,请参阅哈希分片与范围分片对比

哈希索引会在行哈希运算之前将浮点数截断为 64 位整数。例如,哈希索引使用相同的哈希来存储值 2.32.22.9。这是一种冲突,其中的多个值被分配给单个哈希键。冲突可能会对查询性能产生负面影响。

为防止冲突,请勿对无法可靠转换为 64 位整数(然后再转换回浮点数)的浮点数使用哈希索引。

哈希索引不支持大于 253 的浮点数。

哈希索引对数组字段和唯一属性有限制。

哈希函数不支持多键索引:

  • 您无法在包含数组的字段上创建哈希索引,也无法将数组插入哈希索引字段。

  • 如果复合索引中的任何字段是数组,则该索引中的任何字段都不能使用哈希索引。这包括非数组字段。

  • 不能在成为多键索引的复合索引中使用哈希索引。

哈希索引无法涵盖查询。

不能在哈希索引上指定唯一约束。相反,您可以创建具有唯一约束的附加非哈希索引。MongoDB 可以使用该非哈希索引来强制实施所选字段的唯一性。

要创建哈希索引,请参阅创建哈希索引

本部分介绍哈希索引的技术细节。

重要

当 MongoDB 使用哈希索引解析查询时,会使用哈希函数自动计算哈希值。应用程序需计算哈希值。

要查看某个键的哈希值,请使用 convertShardKeyToHashed() 方法。此方法使用与哈希索引相同的哈希函数。

哈希函数会折叠嵌入的文档,并计算整个值的哈希值。