動作の違い

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

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

接続とデータベース

  • 各接続は 1 つの Cloud Firestore データベースに制限されます。
  • データベースを作成してから、接続する必要があります。

命名

データモデルの各部分の命名には、次の違いが適用されます。

コレクション

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

フィールド

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

ドキュメント

  • ドキュメントの最大サイズは 4 MiB です。
  • フィールドのネストの最大深度は 20 です。Array 型フィールドと Object 型フィールドはそれぞれ、全体的な深度を 1 レベル引き上げます。

_id

  • トップレベルの _id フィールドは、ObjectId、String、64 ビット整数、32 ビット整数、Double、Binary、または Object である必要があります。他の BSON 型はサポートされていません。

  • 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 ステージはサポートされていません。サポートされているステージと演算子の完全なリストについては、コマンドセクションをご覧ください。
  • $lookup ステージは let フィールドと pipeline フィールドをサポートしていません。
  • $facet ステージは、非決定的な式であるため、入力ステージで $rand をサポートしていません。

書き込み

  • update または findAndModify の upsert 機能を使用して、ドル記号(「$」)で始まる名前のドキュメントを作成することはできません。
  • 接続文字列に retryWrites=false を含める(またはドライバに適したメソッドを使用する)ことで、ドライバがこの機能を使用しないようにします。 再試行可能な書き込みはサポートされていません。

トランザクション

  • スナップショット分離とシリアル化可能なトランザクションがサポートされています。

  • デフォルトでは、トランザクションはスナップショット分離によるオプティミスティック同時実行制御を使用します。

読み取り保証

  • Cloud Firestore は、snapshotmajoritylinearizable の読み取り保証をサポートしています。デフォルトは snapshot で、これはスナップショット分離を意味します。

    アプリケーションに厳密な整合性が必要で、書き込みスキューの異常を防ぐ必要がある場合は、linearizable を使用します。他のワークロードでは、snapshot を使用することでパフォーマンスが向上し、トランザクションの競合が軽減されます。

書き込み保証

  • w: 'majority'w: 1 の書き込み保証のみがサポートされています。

読み取り保証

  • サポートされているのは、primaryprimaryPreferredprimary_preferredsecondary_preferrednearest の読み取り保証のみです。

インデックス

  • ワイルドカード インデックスはサポートされていません。
  • Cloud Firestore_id に自動的にインデックスを作成しませんが、_id の値がコレクション内で一意であることを保証します。
  • マルチキーが有効になっていないインデックスは、書き込みオペレーションに基づいて自動的にマルチキー インデックスに変更されることはありません。インデックスを作成するときにマルチキーを有効にする必要があります。このオプションは変更できません。

エラー

  • エラーコードとメッセージは、Cloud Firestore と MongoDB で異なる場合があります。

コマンド

以下の動作の違いは、特定のコマンドに適用されます。

  • 次の表に記載されていないコマンドはサポートされていません。
  • comment はほとんどのコマンドで受け入れられますが、無視されます。
  • maxTimeMS はほとんどのコマンドで受け入れられますが、無視されることもあります。

クエリと書き込み

コマンド サポートされていないフィールド

find

  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • collation
  • let

insert

(なし)

update

更新ステートメント内:

  • collation

delete

DELETE ステートメント内:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(なし)

explain

(なし)

トランザクションとセッション

コマンド サポートされていないフィールド

commitTransaction

(なし)

abortTransaction

(なし)

endSessions

(なし)

管理

コマンド サポートされていないフィールド

listDatabases

  • authorizedDatabases
指定されている場合は、filter は空にする必要があります。

listCollections

(なし)

指定されている場合は、authorizedCollections は false にする必要があります。

listIndexes

(なし)

createIndexes

(なし)

dropIndexes

(なし)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
このコマンドは no-op です。

指定されている場合は、capped は false にする必要があります。

次のステップ