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

加密字段和启用的查询

使用Queryable Encryption时,可以使用加密模式在集合级别定义加密字段。 加密字段并启用查询会增加存储要求并影响查询性能。 您可以为相等查询或范围查询配置加密字段,但不能同时为两者配置加密字段。 配置预期查询类型的字段。

有关创建加密模式和配置查询的说明,请参阅创建加密模式。

有关支持的查询操作符和加密字段行为的列表,请参阅支持的查询类型和操作符。

Queryable Encryption需要服务器端加密模式来实施对集合中的特定字段加密。使用自动Queryable Encryption的客户端的行为因数据库连接配置而异:

  • 至少,本地规则必须加密与服务器上远程模式相同的字段。

  • 如果连接 encryptedFieldsMap 对象包含指定集合的密钥,则客户端使用该对象执行自动 Queryable Encryption,而不是使用远程模式。

  • 如果连接 encryptedFieldsMap对象不包含指定集合的密钥,客户端将下载并使用该集合的远程模式。

    重要

    远程模式行为

    使用远程模式时:

    • 客户端相信服务器具有有效的模式

    • 客户端仅使用远程模式来执行自动 Queryable Encryption。客户端不会实施该模式中指定的任何其他验证规则。

在创建集合之前,决定哪些字段应该加密和/或可查询。要更改哪些字段已加密或可查询,需要重建集合的加密模式并重新创建集合。

如果不需要查询加密字段,则可能不需要启用对该字段的查询。 您仍然可以通过查询其他可查询或未加密的字段来检索文档。

对于每个加密的集合, MongoDB都会创建两个元数据集合,从而增加存储空间。 MongoDB为每个加密字段创建一个索引,这会增加对该字段执行写入操作的持续时间。 当写入操作更新索引字段时, MongoDB会更新相关索引。

MongoDB 提供了以下参数,以方便进行性能调优和调试:

min, max

查询类型:range

类型:必须与字段的bsonType匹配。

Required if setting precision. Otherwise optional, but highly recommended. Defaults to the bsonType min and max values.

尽可能指定字段的最小和最大(含)可查询值,因为更小的边界可以提高查询效率。 如果查询的值超出这些范围, MongoDB将返回错误。

strMaxLength

查询类型:substring

类型:2-50(含)之间的整数。

必填。子字符串索引字段允许的最大长度。尝试插入较长的 string 会导致错误。

strMinQueryLength

查询类型:prefix、suffix、substring

类型:正整数。

  • 对于 prefix 或 suffix 查询,必须为 >= 1。

  • 对于 substring 查询,必须为 >= 2。

必填。允许查询的最小前缀/后缀/子字符串长度。尝试查询较短的 string 会返回错误。

strMaxQueryLength

查询类型:prefix、suffix、substring

类型:正整数。

  • 对于 prefix 或 suffix 查询,必须为 >= 1。

  • 对于 substring 查询,必须在 2-6 之间(包含边界值)。

必填。允许查询的最大前缀/后缀/子字符串长度。尝试查询更长的 string 会返回错误。

重要

此设置会严重影响查询性能。尽可能限制最大查询长度。

caseSensitive

查询类型:prefix、suffix、substring

类型:布尔值

必填。前缀/后缀/子字符串查询是否区分大小写。设置为 false 以进行不区分大小写的匹配。如果您在同一字段上启用多种查询类型,则此值对于所有这些类型必须相同。

diacriticSensitive

查询类型:prefix、suffix、substring

类型:布尔值

必填。前缀/后缀/子字符串查询是否必须匹配变音符号。设置为 false 以进行不区分变音符号的匹配。如果您在同一字段上启用多种查询类型,则此值对于所有这些类型必须相同。

警告

这些参数仅供高级用户使用。默认值适用于大多数使用案例,并且仅应在使用案例需要时进行修改。

sparsity

查询类型:range

类型: 1 - 8之间的整数。

可选。默认值为 2。

影响MongoDB对范围值进行索引的彻底程度。 低稀疏性(密集索引)可提高查询性能,但会在每次插入或更新操作的加密元数据集合中存储更多文档,从而导致更大的存储开销。 高稀疏度则相反。

在版本 8.2 中进行了更改:

最大值从 4 变更为 8。

precision

查询类型:range

类型:整数。

可选。 仅当 bsonType 为 double 或 decimal 时才允许。如果未设置, MongoDB将使用与 bsonType 相同的最大精度,即 double 或 decimal。

限制在查询 double 或 decimal字段时考虑的点后的位数。其他数字将被舍去,而不是四舍五入。示例,1 的 precision 将 10.18 视为 10.1 进行查询。加密的值仍存储为 10.18。

指定 precision 并尽可能限制它。每一位数字都会增加存储开销,并对可搜索范围和索引生成产生很大影响。

trimFactor

查询类型:range

类型:整数。

可选。默认值为 6。

trimFactor 控制并发插入和更新的吞吐量。较高的 trimFactor 会提高并发插入和更新的吞吐量,但会费用某些范围读取操作的速度。较低的 trimFactor 则执行相反操作。

contention

查询类型:equality、range、prefix、suffix、substring

类型:整数。

自动加密可选,默认为 8。显式加密必需。

并发写操作,例如在多个文档中连续插入相同的字段/值对,可能会导致争用:即延迟操作的冲突。

通过Queryable Encryption, MongoDB使用内部计数器跟踪加密集合中每个字段/值对的出现次数。 争用因子对该计数器进行分区,类似于大量。 这样可以最大限度地减少使用insert 、 update或findAndModify连续添加或修改具有相同字段/值对的加密字段时递增计数器的问题。 contention = 0创建一个大量,在索引0处包含一个元素。 contention = 4会在索引0 - 4处创建一个包含5个元素的大量。 MongoDB在插入期间递增随机大量元素。

未设置时, contention默认为8 ,可为大多数工作负载提供高性能。 较高的争用可提高低关联基数字段上的插入和更新操作的性能,但会降低查找性能。

For more thorough information on contention factor and its cryptographic implications, see "Section 9: Guidelines" in MongoDB's Queryable Encryption Technical Paper.