自动加密支持的运算操作
本页介绍了为自动客户端字段级加密配置的驱动程序支持的特定命令、查询操作符、更新操作符、聚合阶段和聚合表达式。
支持的读取和写入命令
使用自动客户端字段级加密的驱动程序支持以下命令
对于任何支持的命令,如果该命令使用了不受支持的运算符、聚合阶段或聚合表达式,则驱动程序返回错误。有关支持的运算符、阶段和表达式的完整列表,请参阅本页面的以下部分
以下命令不需要自动加密。配置为自动客户端字段级加密的驱动程序将直接将这些命令传递给 mongod
:
通过配置为自动客户端字段级加密的驱动程序发出任何其他命令将返回错误。
[1] | 虽然自动客户端字段级加密(CSFLE)不加密getMore 命令,但对该命令的响应可能包含加密的字段值。
|
支持的查询运算符
配置为自动客户端字段级加密的驱动程序在针对 确定性加密 字段发出查询运算符时允许以下运算符
将加密字段与null
或正则表达式进行比较的查询始终返回错误,即使使用受支持的查询运算符也是如此。对随机加密字段执行这些运算符的查询返回错误。
当对确定性和随机加密字段执行时,$exists
运算符具有正常行为。
指定任何其他查询运算符对加密字段执行时,将返回错误。
以下查询运算符即使在未对加密字段执行时也会返回错误
警告
BinData的意外行为
MongoDB将客户端字段级加密字段存储为BinData
blob。对加密的BinData
值执行的读取和写入操作可能与对解密值执行相同的操作具有意外或不正确的行为。某些操作具有严格的BSON类型支持,对BinData
值执行这些操作会返回错误。
使用自动客户端字段级加密的驱动程序解析不支持
BinData
值或对BinData
值执行时具有意外行为的运算符或表达式。使用显式(手动)客户端字段级加密的应用程序可以使用此页面作为对加密字段执行读取和写入操作的指导。
不支持的插入操作
配置为自动客户端字段级加密的驱动程序不支持具有以下行为的插入命令
插入具有与加密字段关联的
Timestamp(0,0)
的文档。值(0,0)
表示mongod
应该生成时间戳。当mongod
无法生成加密字段时,生成的结果时间戳将未加密。如果没有加密的
_id
则插入文档,如果配置的自动模式指定了加密的_id
字段。当mongod
自动生成未加密的ObjectId时,省略文档中的_id
会导致文档不符合自动加密规则。插入与确定加密字段关联的数组。自动客户端字段级加密不支持对数组进行确定性加密。
支持更新运算符
已配置自动客户端字段级加密的驱动程序,在针对 确定性加密 字段进行更新时允许以下更新运算符
当在加密字段上使用 $rename
运算符时,自动 JSON 架构必须指定源字段名和目标字段名的相同加密元数据。
针对加密字段指定任何其他更新运算符的更新返回错误。
具有以下行为的更新操作即使使用受支持的运算符也会返回错误
更新操作在加密路径内产生一个数组。
更新操作使用聚合表达式语法。
对于指定对确定性加密字段进行 受支持运算符 的查询过滤器的更新操作,查询过滤器必须仅使用这些字段上的受支持运算符。
支持的聚合阶段
已配置自动客户端字段级加密的驱动程序支持以下聚合管道阶段
$group
(有关使用要求,请参阅$group
行为)$lookup
和$graphLookup
(有关使用要求,请参阅$lookup
和$graphLookup
行为)
针对配置为自动加密的集合执行管道的任何其他阶段都会返回错误。
对于每个受支持的管道阶段,MongoDB都会跟踪在通过受支持的管道时必须加密的字段,并将它们标记为加密。
$group
行为
$group
具有针对客户端字段级加密的以下特定行为
$group
支持
$group不支持
$lookup
和$graphLookup
行为
自动客户端字段级加密支持使用 $lookup
和 $graphLookup
操作(仅在 from
集合与聚合操作针对的集合相匹配的情况下,即自查找操作)。
引用不同 from
集合的 $lookup
和 $graphLookup
阶段将返回错误。
您不能从启用 CSFLE 的 MongoClient
在未加密的集合上执行 $lookup
操作。
支持的聚合表达式
配置为自动客户端字段级加密的驱动程序允许聚合阶段使用以下表达式对 确定性加密 字段进行操作
如果对加密字段发出其他聚合表达式,则所有其他聚合表达式将返回错误。
具有以下行为的聚合阶段即使在使用受支持的聚合表达式的情况下也将返回错误
表达式 | 拒绝的行为 | 示例 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
该表达式指定一个字段,其加密属性必须在运行时才能知道,并且后续聚合阶段包括一个引用该字段的表达式。 |
| |||||||||||||||
该表达式创建一个新字段,该字段引用一个加密字段,并在同一表达式中操作该新字段。 |
| |||||||||||||||
该表达式在比较表达式中引用加密字段的前缀。 |
| |||||||||||||||
表达式的结果与加密字段进行比较。 |
| |||||||||||||||
该表达式将变量绑定到加密字段或尝试重新绑定 $$CURRENT 。 |
| |||||||||||||||
表达式的第一个参数是加密字段,并且
|
|
不支持的字段类型
配置为自动客户端字段级别加密(CSFLE)的驱动程序不支持以下值类型的任何读取或写入操作
加密不足以隐藏这些值的类型信息。
CSFLE不支持对文档数组中的字段自动加密。
自动CSFLE还不支持对以下值类型的确定加密字段的读取或写入操作
数组
布尔值
decimal128
双精度浮点数
对象