本頁面說明 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指令時,系統不會為 Eventarc 產生捨棄收集事件。
後續步驟
- 執行快速入門導覽課程:建立資料庫並連線。
- 如需支援功能的完整清單,請參閱「支援的 MongoDB 資料類型、驅動程式和功能」。