動作の相違点
このページでは、MongoDB 互換の Firestore と MongoDB の動作の違いについて説明します。
MongoDB のバージョンに応じてサポートされている機能の内訳については、以下をご覧ください。
接続とデータベース
- 各接続は、MongoDB 互換の単一の Firestore データベースに制限されます。
 - データベースに接続する前に、データベースを作成する必要があります。
 
命名
データモデルの各部分の命名には、次の違いが適用されます。
コレクション
__.*__に一致するコレクション名はサポートされていません。
フィールド
__.*__に一致するフィールド名はサポートされていません。- 空のフィールド名はサポートされていません。
 
ドキュメント
- ドキュメントの最大サイズは 4 MiB です。
 - フィールドのネストの深さの最大値は 20 です。Array 型と Object 型の各フィールドは、全体的な深度を 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ステージはサポートされていません。サポートされているステージと演算子の完全なリストについては、コマンド セクションをご覧ください。$lookupステージはletフィールドとpipelineフィールドをサポートしていません。
書き込み
updateまたはfindAndModifyの upsert 機能を使用して、ドル記号(「$」)で始まる名前のドキュメントを作成することはできません。- 接続文字列に 
retryWrites=falseを含める(またはドライバに適したメソッドを使用する)ことで、ドライバがこの機能を使用しないようにします。 再試行可能な書き込みはサポートされていません。 
トランザクション
スナップショット分離とシリアル化可能なトランザクションがサポートされています。
デフォルトでは、トランザクションはスナップショット分離によるオプティミスティック同時実行制御を使用します。
読み取り保証
MongoDB 互換の Firestore は、
snapshot、majority、linearizableの読み取り保証をサポートしています。デフォルトはsnapshotで、スナップショット分離を指します。アプリケーションに厳密な整合性が必要で、書き込みスキューの異常を防ぐ必要がある場合は、
linearizableを使用します。他のワークロードでは、snapshotを使用すると、パフォーマンスが向上し、トランザクションの競合が軽減されます。
書き込み保証
w: 'majority'とw: 1の書き込み保証のみがサポートされています。
読み取り保証
- サポートされているのは、
primary、primaryPreferred、primary_preferred、secondary_preferred、nearestの読み取り保証のみです。 
インデックス
- ワイルドカード インデックスはサポートされていません。
 - MongoDB 互換の Firestore では、
_idにインデックスが自動的に作成されることはありませんが、コレクション内で_idの値が一意になるようにします。 - マルチキーが有効になっていないインデックスは、書き込みオペレーションに基づいて自動的にマルチキー インデックスに変更されません。インデックスの作成時にマルチキーを有効にする必要があります。このオプションは変更できません。
 
エラー
- エラーコードとメッセージは、MongoDB 互換の Firestore と MongoDB で異なる場合があります。
 
コマンド
次の動作の違いは、特定のコマンドに適用されます。
- 次の表に記載されていないコマンドはサポートされていません。
 maxTimeMSはほとんどのコマンドで受け入れられますが、無視されることがあります。
クエリと書き込み
| コマンド | サポートされていないフィールド | 
|---|---|
  | 
      
 
 
 
 
 
 
 
 
 
 
 
 
 
  | 
    
  | 
      
 
 
 
 
 
  | 
    
  | 
      
 
  | 
    
  | 
      
 
 
  | 
    
  | 
      
 
 削除ステートメント内: 
 
  | 
    
  | 
      
 
 
 
 
 
 
  | 
    
  | 
      
 
 
 
  | 
    
  | 
      
 
 
 
  | 
    
  | 
      
  | 
    
  | 
      (なし)  | 
    
トランザクションとセッション
| コマンド | サポートされていないフィールド | 
|---|---|
  | 
      
  | 
    
  | 
      
  | 
    
  | 
      (なし)  | 
    
管理
| コマンド | サポートされていないフィールド | 注 | 
|---|---|---|
  | 
      
 
  | 
      指定されている場合は、filter は空にする必要があります。 | 
    
  | 
      
  | 
      指定されている場合は、authorizedCollections は false にする必要があります。 | 
    
  | 
      
  | 
      |
  | 
      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  | 
      このコマンドは no-op です。 指定されている場合は、 capped は false にする必要があります。 | 
    
次のステップ
- クイックスタート: データベースを作成して接続するを実行する。
 - サポートされている機能の完全なリストについては、サポートされている MongoDB データ型、ドライバ、機能をご覧ください。