Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / / /

限制

在此页面上

  • Overview
  • Atlas Search
  • MongoDB 支持限制
  • 竞争因子
  • 手动元数据集合压缩
  • encryptedFieldsMap 修改
  • 读写操作支持
  • 日志校订
  • 查询日志和数据库分析器编辑
  • 命令和聚合阶段输出编辑
  • 拓扑支持
  • 分片
  • CRUD
  • 集合
  • 删除集合
  • 创建集合
  • 查询类型
  • 加密字段名称
  • 视图
  • 排序规则
  • Unique Indexes
  • _id 字段
  • 读/写查询支持

在启用Queryable Encryption之前,请考虑这些限制和约束。 某些操作不受支持,而其他操作的行为则不同。

Queryable Encryption与 MongoDB Atlas Atlas Search不兼容。

在集合上启用 Queryable Encryption 会导致某些诊断命令中的字段被脱敏,并且查询日志中会省略一些操作。这限制了 MongoDB 的支持工程师获取可用的数据,特别是在分析查询性能时。要衡量操作对加密集合的影响,可使用第三方应用程序性能监控工具来收集指标。

有关详细信息,请参阅“日志校订”部分。

争用因子是一种有助于根据并发操作数量调整性能的设置。 未设置时,争用使用默认值 8 ,可为大多数工作负载提供高性能。

只有在指定加密字段时才能设置争用因子。一旦指定了加密字段,争用因子就不可更改。

有关更多信息,请参阅配置争用因子

当元数据集合的大小超过 1 GB 时,请手动执行元数据集合压缩操作。压缩操作可以减小与加密字段相关的元数据集合的大小,并提升性能。

请勿修改传递给 MongoClientencryptedFieldsMap。该操作会导致查询时出现意外和不正确的行为。

mongod 仅存储加密的 BinData 并针对 BinData 值应用指定加密字段的任何聚合表达式或查询操作符。虽然表达式或操作符可能支持 BinData 字段,但与针对解密值发出相同的表达式或操作符相比,结果值可能不正确或不符合预期。如果表达式或操作符不支持 BinData 值,mongod 会引发错误。

为了提高安全性,Queryable Encryption 会隐去加密集合上某些诊断命令中的字段,并从查询日志中省略某些操作。加密集合是任何带有 encryptedFields 选项的集合。

在加密集合上运行以下 CRUD 操作时,慢操作查询日志和数据库分析器 system.profile 集合中会省略这些操作。

collStats 命令和 $collStats 聚合阶段:

  • Omit "queryExecStats"

  • Omit "latencyStats"

  • 编辑"WiredTiger" (如果存在)以仅包含url字段。

currentOp 命令和 $currentOp 聚合阶段:

  • 省略 "command" 之后的所有字段。

  • 编辑 "command" 以仅包含第一个元素 $comment$db

top命令仅返回加密集合的集合名称。

$planCacheStats聚合阶段会省略针对加密集合的操作,即使这些操作会正常缓存。

  • 支持副本集和分片集群

  • 不支持独立部署

  • 不支持从节点读取

  • 元数据集合不能被分片

  • 分片键不得是加密字段

  • 对于使用 Queryable Encryption 分片集群事务,您必须将 readConcern 设置为 snapshot

  • Queryable Encryption 不支持多文档更新操作。不支持 db.collection.updateMany()

  • Queryable Encryption 不支持多语句更新或删除操作。不支持包含多个更新或删除操作的 db.collection.bulkWrite()

  • Queryable Encryption限制db.collection.findAndModify()参数。

    • fields 不允许

    • new 必须为 false

  • 执行更新或插入操作时,过滤器中的任何加密字段都将从插入中排除。

  • 您不能对同一集合同时使用客户端字段级加密和 Queryable Encryption。

    • Queryable Encryption 不支持从使用客户端字段级加密进行加密的集合进行迁移。您必须解密您的文档并将其逐个插入。

    • Queryable Encryption不支持未加密集合的自动迁移。 您必须逐个插入文档。

  • Queryable Encryption 仅支持新集合。您不能向现有集合添加或删除 Queryable Encryption。

  • 您无法重命名具有加密字段的集合。

  • 如果 jsonSchema 包含 encrypt 关键字,则在创建 Queryable Encryption 集合时不能将 jsonSchema 指定到 db.createCollection()

  • 可查询加密不支持视图时间序列集合固定大小集合。

  • Queryable Encryption 不支持 TTL 索引唯一索引

  • 您无法禁用 jsonSchema 验证。

  • 当集合使用 encryptedFields 选项时:

    • 无法将 validationLevel 设置为 none

    • 无法将 validationAction 设置为 warn

  • 从未配置为 Queryable Encryption 的 MongoClient 中删除集合,不会删除关联的元数据集合。如果您在删除元数据集合之前删除带有加密字段的集合,则 mongod 会记录警告。

提示

删除为可查询Queryable Encryption配置了MongoClient的集合时,兼容的驱动程序也会删除关联的元数据集合。

始终显式创建使用Queryable Encryption的任何集合。 隐式集合创建不会创建必要的索引和元数据集合,从而导致查询性能不佳。

encryptedFieldsMap 中创建集合时,为字段指定的查询类型是不可变的。您无法在现有字段上添加新的查询类型,也不能修改现有的查询类型。

加密的字段名称不可更改。例如,如果指定 ssn 作为要加密的字段,那么您不能将字段名称 $renametaxPayerID

应用程序不能依赖自动加密验证来阻止对具有加密字段的集合上的视图进行不支持的查询。

如为基础视图聚合管道查询引用加密字段,则对包含(使用 Queryable Encryption)加密值的集合上的视图查询可能会返回意外或不正确的结果。如果在包含(使用 Queryable Encryption)加密值的集合上创建视图,请勿对加密字段进行操作,以降低出现意外或错误结果的风险。

有关视图的详细信息,请参阅视图

Queryable Encryption 忽略用户指定的排序规则或集合默认排序规则。加密会掩盖字段值,并阻止正常的排序规则行为。对加密字段的排序规则敏感查询可能会返回意外或不正确的结果。

有关排序规则的更多信息,请参阅排序规则文档

可查询加密兼容驱动程序有一个支持的自动加密操作列表。对于不支持的读取和写入操作,底层支持库无法内省集合目录来识别默认排序规则。因此,应用程序不能依赖可查询加密验证来阻止对具有默认排序规则的加密字段进行查询。

如果索引键指定了任何加密字段,则唯一索引无法保证唯一性。

即使输入相同,可查询加密也总是输出不同的加密值。Server 认为每个加密值都是唯一的,即使解密值可能不唯一。这意味着,即使某个集合对字段使用了索引强制唯一约束,该集合仍可能包含多个对该字段具有重复明文值的文档。

配置为自动加密的 Queryable Encryption 兼容驱动程序支持某些自动加密操作。 对于不支持的读取和写入操作,底层库无法自省索引目录以将给定字段标识为唯一字段。 应用程序不能依赖自动加密验证来防止对随机加密字段的唯一约束违规。

您无法将可查询加密配置为加密 _id 字段,因为它依赖于 MongoDB 自动生成的值。

自动加密支持一部分命令、查询操作符、更新操作符、聚合阶段和聚合表达式。有关支持的操作的列表,请参阅自动加密的支持操作

后退

兼容性