動作の違い

このページでは、MongoDB 互換の Firestore と MongoDB の動作の違いについて説明します。

MongoDB のバージョンに応じてサポートされている機能の詳細については、以下をご覧ください。

接続とデータベース

  • 各接続は、MongoDB 互換データベースを使用する単一の Firestore に制限されます。
  • データベースに接続する前に、データベースを作成する必要があります。

命名

データモデルの部分の命名には、次の違いがあります。

コレクション

  • __.*__ に一致するコレクション名はサポートされていません。

フィールド

  • __.*__ に一致するフィールド名はサポートされていません。
  • 空のフィールド名はサポートされていません。

ドキュメント

  • ドキュメントの最大サイズは 4 MiB です。
  • フィールドのネストの最大深度は 20 です。配列型とオブジェクト型の各フィールドは、全体的な深度を 1 レベル引き上げます。

_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 の算術演算はサポートされていません。

Double

  • NaN 値は書き込み時に正規化されます。

正規表現

  • 正規表現オプションは有効なもの(「i」、「m」、「s」、「u」、「x」)で、重複することなくアルファベット順に指定する必要があります。

クエリ

  • 自然な並べ替え順序(明示的な並べ替えのないクエリ)が、挿入順序または _id 昇順の並べ替え順序と一致しない。

集約

  • 集計は 250 ステージに制限されています。
  • $merge ステージと $out ステージはサポートされていません。サポートされているステージと演算子の完全なリストについては、コマンドのセクションをご覧ください。

書き込み

  • ドル記号($)で始まる名前のドキュメントは、update または findAndModify のアップサート機能を使用して作成できません。
  • ドライバがこの機能を使用しようとしないように、接続文字列に 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

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
このコマンドは no-op です。

capped を指定する場合は false にする必要があります。

次のステップ