サポートされている MongoDB データ型とドライバ
次の表に、MongoDB 互換の Firestore でサポートされている MongoDB のデータ型、ドライバ、サードパーティ ツールを示します。
データ型
| BSON 型 | サポート対象 |
|---|---|
| 32 ビット整数 | ○ |
| 64 ビット整数 | ○ |
| 配列 | ○ |
| バイナリデータ | ○ |
| ブール値 | ○ |
| 日付 | ○ |
| DBPointer | いいえ |
| Decimal128 | ○ |
| Double | ○ |
| JavaScript | × |
| JavaScript(スコープ付き) | × |
| MaxKey | ○ |
| MinKey | ○ |
| Null | ○ |
| オブジェクト | ○ |
| ObjectId | ○ |
| 正規表現 | ○ |
| 文字列 | ○ |
| 記号 | × |
| タイムスタンプ | ○ |
| 未定義 | × |
ドキュメント _id
ドキュメントのトップレベルの _id フィールドは、次のいずれかの型にする必要があります。
- ObjectId
- 文字列
- 64 ビット整数
- 32 ビット整数
- Double
- バイナリ
- オブジェクト
- ブール値
_id の合計サイズは 1,500 バイト以下にする必要があります。
Object 型の ID 内の各値は、サポートされている ID 型または値の配列(各値はサポートされている ID 型)である必要があります。
他の BSON 型はサポートされていません。
言語と MongoDB ドライバ
MongoDB 互換の Firestore は、次のバージョンのドライバをサポートしています。
| 言語 | ドライバのバージョン |
|---|---|
| Java | 5.x |
| Node.js | 6.x 5.x |
| Python | 4.x 3.x (x ≥ 12) |
| Go | 2.x |
| C# | 3.x |
| Ruby | 2.x (x ≥ 16) |
OIDC 認証のサポート
Go、C#、Ruby のドライバは、サポートされているすべてのドライバ バージョンで、Google Cloud からの OpenID Connect(OIDC)認証をサポートしています。
Java、Node.js、Python ドライバは、次のドライバ バージョン以降で、Google Cloud からの OIDC 認証をサポートしています。
- Java: 4.10
- Node.js: 6.7
- Python: 4.7
サードパーティ製ツール
MongoDB 互換の Firestore は、このセクションに記載されているサードパーティ ツールをサポートしています。
| ツール | 説明 | 注 |
|---|---|---|
| mongoimport | MongoDB データベース ツール | データの一括読み込み をご覧ください。 |
| mongoexport | MongoDB データベース ツール | |
| mongodump | MongoDB データベース ツール | |
| mongorestore | MongoDB データベース ツール | データの一括読み込み をご覧ください。 |
| mongosh | MongoDB シェル | |
| Mongoose | MongoDB オブジェクト モデリング ツール | |
| MongoDB Compass | データ探索用の GUI ツール |
BSON と Firestore の型の互換性
このセクションでは、MongoDB BSON タイプと Firestore 値のマッピングの概要について説明します。BSON はバイナリ形式であり、Firestore API はプロトコル バッファを使用するため、一部の型は直接マッピングされますが、他の型は特別なマップ表現が必要です。
マッピングの概要
次の表に、BSON データ型と Firestore プロトコル バッファ表現の対応関係を示します。
直接マッピング
これらの型は、両方のシステムで直接対応する型があります。
| BSON 型 | BSON | Firestore Proto | メモ |
|---|---|---|---|
| 倍精度 | 1.23 |
double_value: 1.23 |
|
| 文字列 | "hello" |
string_value: "hello" |
|
| オブジェクト | { |
map_value { |
|
| 配列 | [ |
array_value { |
|
| バイナリ(サブタイプ 0) | BinData(0, 'SGVsbG8=') |
bytes_value: "Hello" |
|
| ブール値 | true |
boolean_value: true |
|
| Null | null |
null_value: NULL_VALUE |
|
| 64 ビット整数 | Long('1234567890') |
integer_value: 1234567890 |
|
| 日付 | ISODate('2026-05-22T04:00:00Z') |
timestamp_value { |
Firestore のタイムスタンプ値はマイクロ秒単位の精度で保存されますが、BSON に変換するとミリ秒単位の精度を超える部分は失われます。 |
Firestore API でマップとして表される BSON 型
これらの BSON タイプは、タイプを示す特別なキーとともに Firestore map_value にラップされます。
| BSON 型 | BSON | Firestore Proto | メモ |
|---|---|---|---|
| 32 ビット整数 | 123 |
map_value { |
|
| バイナリ(ゼロ以外のサブタイプ) | BinData(1, 'AQIDBA==') |
map_value { |
データの先頭に付加されるサブタイプ バイト。 |
| ObjectId | ObjectId('67eea9446dc71ec469e9496a') |
map_value { |
小文字の 16 進文字列。 |
| タイムスタンプ(社内向け) | Timestamp(123, 1) |
map_value { |
MongoDB の内部タイムスタンプ。 |
| 正規表現 | RegExp('.*', 'im') |
map_value { |
|
| 最小キー | MinKey() |
map_value { |
|
| 最大キー | MaxKey() |
map_value { |
|
| Decimal128 | Decimal128('4E7') |
map_value { |
BSON にネイティブに存在しない Firestore の型
これらの Firestore 型は、BSON に変換されると、特別に構造化されたマップとして表されます。
| Firestore のタイプ | BSON | Firestore Proto |
|---|---|---|
| GeoPoint | { |
geo_point_value { |
| ベクトル | { |
map_value { |
| ドキュメント参照 | { |
reference_value: "projects/.../documents/col/doc" |
フィールド名
__.*__ と一致する MongoDB のフィールド名は、Firestore に保存されるときに r: を組み込むことでエスケープされます。たとえば、BSON フィールド __foo__ は Firestore で __r:foo__ になります。
クライアント SDK の BSON データ型
Firestore クライアント SDK を使用する場合は、専用の SDK クラスを使用して、128 ビットの 10 進数、正規表現、BSON タイムスタンプなどの BSON データ型を表すことができます。
Node.js
const { RegexValue, Decimal128Value, BsonTimestamp } = require('@google-cloud/firestore'); // Setting fields with BSON data types const res = await db.collection('foo').doc('bar').set({ regex: new RegexValue('myRegexPattern', 'i'), decimal: new Decimal128Value('0.73e-7'), bsonTimestamp: new BsonTimestamp(1732754912, 500), });
Java
import com.google.cloud.firestore.BsonTimestamp; import com.google.cloud.firestore.Decimal128Value; import com.google.cloud.firestore.RegexValue; import java.util.HashMap; import java.util.Map; Map<String, Object> data = new HashMap<>(); data.put("regex", new RegexValue("myRegexPattern", "i")); data.put("decimal", new Decimal128Value("0.73e-7")); data.put("bson_timestamp", new BsonTimestamp(1732754912, 500)); db.collection("foo").doc("bar").set(data);
Java
Android
import com.google.firebase.firestore.BsonTimestamp; import com.google.firebase.firestore.Decimal128Value; import com.google.firebase.firestore.RegexValue; import java.util.HashMap; import java.util.Map; Map<String, Object> data = new HashMap<>(); data.put("regex", new RegexValue("myRegexPattern", "i")); data.put("decimal", new Decimal128Value("0.73e-7")); data.put("bson_timestamp", new BsonTimestamp(1732754912, 500)); db.collection("foo").doc("bar").set(data);
Go
import ( "context" "cloud.google.com/go/firestore" ) func writeBsonTypes(ctx context.Context, client *firestore.Client) error { _, err := client.Collection("foo").Doc("bar").Set(ctx, map[string]interface{}{ "regex": firestore.RegexValue{Pattern: "myRegexPattern", Options: "i"}, "decimal": firestore.Decimal128Value{Value: "0.73e-7"}, "bson_timestamp": firestore.BsonTimestamp{Seconds: 1732754912, Increment: 500}, }) return err }
次のステップ
- クイックスタート: データベースを作成して接続するを実行する。
- 動作の違いについて学習する。
- MongoDB のバージョンに応じてサポートされている機能の内訳については、以下をご覧ください。