行为差异
本页介绍了支持 MongoDB 的 Firestore 与 MongoDB 之间的行为差异。如需详细了解受支持的功能(具体取决于 MongoDB 版本),请参阅:
连接和数据库
- 每个连接只能与一个具有 MongoDB 兼容性的 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
阶段。如需查看支持的阶段和运算符的完整列表,请参阅命令部分。
写入
- 您无法使用
update
或findAndModify
的更新/插入功能创建名称以美元符号(“$”)开头的文档。 - 请确保您的连接字符串包含
retryWrites=false
(或使用适用于您的驱动程序的方法),以确保驱动程序不会尝试使用此功能。不支持可重试写入。
交易
- 不支持快照事务。
- 事务使用悲观并发控制和锁定。为避免锁争用,请限制事务中读取的数据量。
索引
- 不支持通配符索引。
- 不支持唯一索引
- 具有 MongoDB 兼容性的 Firestore 不会自动在
_id
上创建索引,但会确保_id
的值在集合中是唯一的。 - 未启用多键的索引不会根据写入操作自动更改为多键索引。您必须在创建索引时启用多键,并且该选项无法更改。
读取疑虑
- 仅支持
majority
读取关注级别。
写入疑虑
- 仅支持
w: 'majority'
和w: 1
写入顾虑。
读取偏好设置
- 仅支持
primary
、primaryPreferred
、primary_preferred
、secondary_preferred
和nearest
读取关注项。
错误
- 支持 MongoDB 的 Firestore 和 MongoDB 的错误代码和消息可能不同。
命令
以下行为差异适用于特定命令。
- 下表中未列出的命令不受支持。
- 大多数命令都接受
maxTimeMS
,但可能会被忽略。
查询和写入
命令 | 不支持的字段 |
---|---|
|
|
|
|
|
|
|
|
|
在 delete 语句中:
|
|
|
|
|
|
|
|
|
|
(无) |
交易和会话
命令 | 不支持的字段 |
---|---|
|
|
|
|
|
(无) |
管理
命令 | 不支持的字段 | 备注 |
---|---|---|
|
|
如果提供 filter ,则必须为空。 |
|
|
如果提供 authorizedCollections ,则必须设为 false。 |
|
|
|
|
|
此命令无操作。 如果提供 capped ,则必须为 false。 |
后续步骤
- 运行快速入门:创建数据库并连接到该数据库。
- 如需查看支持的功能的完整列表,请参阅支持的 MongoDB 数据类型、驱动程序和功能。