行為差異

本頁說明與 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 階段。如需支援的階段和運算子完整清單,請參閱「指令」一節。

寫入

  • 如果文件名稱開頭為貨幣符號「$」,則無法使用 updatefindAndModify 的 upsert 功能建立文件。
  • 請確認連線字串包含 retryWrites=false (或使用適合驅動程式的方法),確保驅動程式不會嘗試使用這項功能。系統不支援可重試的寫入作業。

交易

  • 系統不支援快照交易。
  • 交易會使用悲觀並行控制,並進行鎖定。為避免鎖定爭用,請限制交易中讀取的資料量。

索引

  • 系統不支援萬用字元索引。
  • 不支援唯一索引
  • 與 MongoDB 相容的 Firestore 不會自動在 _id 上建立索引,但可確保 _id 的值在集合中是唯一的。
  • 如果索引未啟用多鍵功能,系統不會根據寫入作業自動將其變更為多鍵索引。建立索引時,您必須啟用多鍵,且無法變更此選項。

讀取疑慮

  • 系統僅支援 majority 讀取關注層級。

寫入疑慮

  • 系統僅支援 w: 'majority'w: 1 寫入疑慮。

讀取偏好設定

  • 僅支援 primaryprimaryPreferredprimary_preferredsecondary_preferrednearest 讀取關注事項。

錯誤

  • 與 MongoDB 相容的 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

在刪除陳述式中:

  • 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。

後續步驟