行为差异

仅与 Cloud Firestore 企业版相关。

本页面介绍了与 MongoDB 兼容的 Cloud Firestore 和 MongoDB 之间的行为差异。

如需详细了解支持的功能(具体取决于 MongoDB 版本),请参阅:

连接和数据库

  • 每个连接仅限于一个与 MongoDB 兼容的 Cloud Firestore 数据库。
  • 必须先创建数据库,然后才能连接到该数据库。

命名

以下差异适用于数据模型的命名部分。

集合

  • 不支持与 __.*__ 匹配的集合名称。

字段

  • 不支持与 __.*__ 匹配的字段名称。
  • 不支持空字段名称。

文档

  • 文档大小上限为 4 MiB。
  • 字段的嵌套深度上限为 20。每个数组和对象类型的字段都会向总深度额外添加一层深度。

_id

  • 文档 _id(顶级字段)必须是 ObjectId、字符串或 64 位整数。不支持其他 BSON 类型。
  • 不支持空字符串 ("") 和 64 位 0 (0L)。

  • 不支持 JavaScript、Symbol、DBPointer 和 Undefined BSON 类型。

日期

  • 日期值必须介于 [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z] 之间。

Decimal128

  • NaN、正无穷大和负无穷大值在写入时会进行规范化处理。
  • 不支持对 Decimal128 进行算术运算。

双精度型

  • NaN 值在写入时会进行规范化处理。

正则表达式

  • 正则表达式选项必须有效(“i”“m”“s”“u”或“x”),并且按字母顺序提供且不重复。

查询

  • 自然排列顺序(没有明确排序的查询)与插入顺序或按 _id 升序排列的顺序不一致。

数据汇总

  • 聚合的阶段数上限为 250 个。
  • 不支持 $merge$out 阶段。如需查看支持的阶段和运算符的完整列表,请参阅命令部分。
  • $lookup 阶段仅限于在 _id 上指定 foreignField

写入

  • 无法使用 updatefindAndModify 的 upsert 功能创建名称以美元符号 (“$”) 开头的文档。
  • 请确保连接字符串包含 retryWrites=false(或使用适合驱动程序的方法),以确保驱动程序不会尝试使用此功能。不支持可重试写入。

交易

  • 支持快照隔离和可序列化事务。

  • 默认情况下,事务结合使用乐观并发控制机制和快照隔离。

读取关注

  • 与 MongoDB 兼容的 Cloud Firestore 支持 snapshotmajoritylinearizable 读取关注。默认值为 snapshot,表示快照隔离。

    如果应用需要严格的一致性,并且必须防止写入偏差异常,请使用 linearizable。对于其他工作负载,snapshot 可以提高性能并减少事务争用。

写入关注

  • 仅支持 w: 'majority'w: 1 写入关注。

读取偏好设置

  • 仅支持 primaryprimaryPreferredprimary_preferredsecondary_preferrednearest 读取关注。

索引

  • 不支持通配符索引。
  • 与 MongoDB 兼容的 Cloud Firestore 不会自动在 _id 上创建索引,但会确保 _id 的值在集合中是唯一的。
  • 未启用多键的索引不会根据写入操作自动更改为多键索引。您必须在创建索引时启用多键,并且该选项无法更改。

错误

  • 与 MongoDB 兼容的 Cloud Firestore 和 MongoDB 之间的错误代码和消息可能有所不同。

命令

以下行为差异适用于特定命令。

  • 以下表中未列出的命令不受支持。
  • 大多数命令都接受 maxTimeMS,但可能会忽略它。

查询和写入

命令 不受支持的字段

find

  • comment
  • readConcern
  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • bypassDocumentValidation
  • readConcern
  • collation
  • hint
  • comment
  • let

insert

  • bypassDocumentValidation
  • comment

update

  • collation
  • arrayFilters
  • hint

delete

  • comment
  • write

在 delete 语句中:

  • collation
  • hint

findAndModify

  • fields
  • bypassDocumentValidation
  • collation
  • arrayFilters
  • hint
  • comment
  • let

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(无)

事务和会话

命令 不受支持的字段

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(无)

管理

命令 不受支持的字段 备注

listDatabases

  • authorizedDatabases
  • comment
如果提供了 filter,则必须为空。

listCollections

  • comment
如果提供了 authorizedCollections,则必须为 false。

listIndexes

  • comment

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • writeConcern
  • encryptedFields
  • comment
此命令免操作。

如果提供了 capped,则必须为 false。

后续步骤