本頁面說明 Cloud Firestore 和 MongoDB 之間的行為差異。
如要依 MongoDB 版本查看支援的功能,請參閱:
連線和資料庫
- 每個連線只能連結一個 Cloud Firestore 資料庫。
- 必須先建立資料庫,才能連線。
命名
資料模型各部分的命名差異如下。
珍藏內容
- 不支援與
__.*__相符的集合名稱。
欄位
- 不支援與
__.*__相符的欄位名稱。 - 欄位名稱不得留空。
文件
- 文件大小上限為 16 MiB。
- 欄位的巢狀深度上限為 20。每個陣列和物件類型的欄位都會使整體深度增加一個層級。
- 在 Eventarc 事件中,事件酬載不包含大於 10 MiB 的文件。
_id 欄位
- 頂層
_id欄位必須是 ObjectId、字串、64 位元整數、32 位元整數、雙精度浮點數、二進位檔或物件。不支援其他 BSON 類型。
值
- 不支援 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階段。如需支援階段和運算子的完整清單,請參閱指令一節。 $facet階段不支援輸入階段中的$rand或$sample,因為這是易失運算式。
寫入
- 如果文件名稱開頭為美元符號 (「$」),則無法使用
update或findAndModify的 upsert 功能建立。 - 請確認連線字串包含
retryWrites=false(或使用適合驅動程式的方法),確保驅動程式不會嘗試使用這項功能。不支援可重試寫入。
交易
支援快照隔離和可序列化交易。
根據預設,交易會使用樂觀並行控制和快照隔離。
讀取疑慮資料
Cloud Firestore 支援
snapshot、majority和linearizable讀取關注。預設值為snapshot,代表快照隔離。如果應用程式需要嚴格的一致性,且必須防止寫入偏斜異常,請使用
linearizable。對於其他工作負載,snapshot則可提升效能並減少交易爭用。
寫入疑慮
- 僅支援
w: 'majority'和w: 1寫入關注。
讀取偏好設定
- 僅支援
primary、primaryPreferred、primary_preferred、secondary_preferred和nearest讀取關注。
索引
- 不支援萬用字元索引。
- Cloud Firestore 不會自動在
_id上建立索引,但會確保_id的值在集合中不重複。如要達到類似的排序行為,您必須在_id欄位上明確建立排序索引。不過,請留意潛在的熱點問題,尤其是_id值單調遞增或遞減 (例如時間戳記) 時,因為這可能會影響大規模效能。 - 如果索引未啟用多鍵,系統不會根據寫入作業自動將其變更為多鍵索引。建立索引時必須啟用多重鍵,且無法變更選項。
錯誤
- Cloud Firestore 和 MongoDB 的錯誤代碼和訊息可能不同。
指令
特定指令的行為差異如下。
- 不支援下表未列出的指令。
- 大多數指令都接受
comment,但會忽略。 - 大多數指令都接受
maxTimeMS,但可能會忽略。
查詢
和寫入
| 指令 | 不支援的欄位 |
|---|---|
|
|
|
|
|
|
|
|
(無) |
|
|
在更新陳述式中:
|
|
|
在 delete 陳述式中:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(無) |
|
|
(無) |
交易
和工作階段
| 指令 | 不支援的欄位 |
|---|---|
|
|
(無) |
|
|
(無) |
|
|
(無) |
管理
| 指令 | 不支援的欄位 | 附註 |
|---|---|---|
|
|
|
如果提供 filter,則必須留空。 |
|
|
(無) |
如有提供,authorizedCollections 必須為 false。 |
|
|
(無) |
|
|
|
(無) |
|
|
|
(無) |
|
|
|
|
這個指令是無作業。 如果提供 capped,則必須為 false。
|
|
|
(無) |
Drop 集合限制
刪除集合時,請注意下列限制:
- 重新建立索引:刪除索引後,無法立即建立相同的索引設定。您必須等待背景刪除作業完成。
- 大小限制:捨棄大型集合可能會導致連線逾時。如果發生逾時,請延長連線期限。您可以改用大量刪除功能。
- 事件:使用
drop指令時,系統不會為 Eventarc 產生捨棄收集事件。
後續步驟
- 執行快速入門導覽課程:建立資料庫並連線。
- 如需支援功能的完整清單,請參閱「支援的 MongoDB 資料類型、驅動程式和功能」。