Unterstützte MongoDB-Datentypen und ‑treiber

In den folgenden Tabellen sind die unterstützten MongoDB-Datentypen, ‑Treiber und ‑Drittanbietertools für Firestore mit MongoDB-Kompatibilität aufgeführt.

Datentypen

BSON-Typ Unterstützt
32-Bit-Ganzzahl Ja
64-Bit-Ganzzahl Ja
Array Ja
Binärdaten Ja
Boolesch Ja
Datum Ja
DBPointer Nein
Decimal128 Ja
Doppelt Ja
JavaScript Nein
JavaScript (mit Bereich) Nein
MaxKey Ja
MinKey Ja
Null Ja
Objekt Ja
ObjectId Ja
Regulärer Ausdruck Ja
String Ja
Symbole Nein
Zeitstempel Ja
Nicht definiert Nein

Dokument-_id

Das Feld _id auf oberster Ebene in einem Dokument muss einen der folgenden Typen haben:

  • ObjectId
  • String
  • 64-Bit-Ganzzahl
  • 32-Bit-Ganzzahl
  • Doppelt
  • Binär
  • Objekt
  • Boolesch

Die Gesamtgröße von _id darf 1.500 Byte nicht überschreiten.

Jeder Wert innerhalb einer ID vom Typ „Object“ muss ebenfalls einen unterstützten ID-Typ haben oder ein Array von Werten sein, die jeweils einen unterstützten ID-Typ haben.

Andere BSON-Typen werden nicht unterstützt.

Sprachen und MongoDB-Treiber

Firestore mit MongoDB-Kompatibilität unterstützt die folgenden Treiberversionen:

Sprache Treiberversionen
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)

Unterstützung für OIDC-Authentifizierung

Die Go-, C#- und Ruby-Treiber unterstützen die OpenID Connect-Authentifizierung (OIDC) vonGoogle Cloud für alle unterstützten Treiberversionen.

Die Java-, Node.js- und Python-Treiber unterstützen die OIDC-Authentifizierung vonGoogle Cloud ab den folgenden Treiberversionen:

  • Java: 4.10
  • Node.js: 6.7
  • Python: 4.7

Drittanbieter-Tools

Firestore mit MongoDB-Kompatibilität unterstützt die in diesem Abschnitt beschriebenen Drittanbietertools.

Tool Beschreibung Hinweise
mongoimport MongoDB-Datenbanktools Siehe Bulk-Daten laden
mongoexport MongoDB-Datenbanktools
mongodump MongoDB-Datenbanktools
mongorestore MongoDB-Datenbanktools Siehe Bulk-Daten laden
mongosh MongoDB-Shell
Mongoose MongoDB-Objektmodellierungstool
MongoDB Compass GUI-Tool für die Datenexploration

Kompatibilität von BSON- und Firestore-Typen

In diesem Abschnitt wird die Zuordnung zwischen MongoDB-BSON-Typen und Firestore-Werten zusammengefasst. Da BSON ein Binärformat ist und die Firestore API Protokollzwischenspeicher verwendet, werden einige Typen direkt zugeordnet, während andere spezielle Zuordnungsdarstellungen erfordern.

Zuordnung – Übersicht

In den folgenden Tabellen wird gezeigt, wie BSON-Datentypen den Darstellungen von Firestore-Protokollzwischenspeichern entsprechen.

Direkte Zuordnungen

Diese Typen haben in beiden Systemen eine direkte Entsprechung.

BSON-Typ BSON Firestore-Proto Hinweise
Double 1.23 double_value: 1.23
String "hello" string_value: "hello"
Object
{
"a": 1.23
}
map_value {
fields {
key: "a"
value {
double_value: 1.23
}
}
}
Array
[
1.23,
"a"
]
array_value {
values {
double_value: 1.23
}
values {
string_value: "a"
}
}
Binär (Untertyp 0) BinData(0, 'SGVsbG8=') bytes_value: "Hello"
Boolesch true boolean_value: true
Null null null_value: NULL_VALUE
64-Bit-Ganzzahl Long('1234567890') integer_value: 1234567890
Datum ISODate('2026-05-22T04:00:00Z')
timestamp_value {
seconds: 1779470400
nanos: 0
}
Firestore-Zeitstempelwerte werden mit einer Genauigkeit von einer Mikrosekunde gespeichert. Bei der Konvertierung in BSON gehen jedoch alle Werte verloren, die über die Genauigkeit von einer Millisekunde hinausgehen.

BSON-Typen, die in der Firestore API als Maps dargestellt werden

Diese BSON-Typen werden im Firestore-map_value mit speziellen Schlüsseln umschlossen, um den Typ anzugeben.

BSON-Typ BSON Firestore-Proto Hinweise
32-Bit-Ganzzahl 123
map_value {
fields {
key: "__int__"
value {
integer_value: 123
}
}
}
Binär (Untertyp ungleich null) BinData(1, 'AQIDBA==')
map_value {
fields {
key: "__binary__"
value {
bytes_value: "<subtype + data>"
}
}
}
Untertyp-Byte, das den Daten vorangestellt wird.
ObjectId ObjectId('67eea9446dc71ec469e9496a')
map_value {
fields {
key: "__oid__"
value {
string_value:
"67eea9446dc71ec469e9496a"
}
}
}
Hexadezimalstring in Kleinbuchstaben.
Zeitstempel (intern) Timestamp(123, 1)
map_value {
fields {
key: "__request_timestamp__"
value {
map_value {
fields {
key: "seconds"
value {
integer_value: 123
}
}
fields {
key: "increment"
value {
integer_value: 1
}
}
}
}
}
}
Interner MongoDB-Zeitstempel.
Regulärer Ausdruck RegExp('.*', 'im')
map_value {
fields {
key: "__regex__"
value {
map_value {
fields {
key: "pattern"
value {
string_value: ".*"
}
}
fields {
key: "options"
value {
string_value: "im"
}
}
}
}
}
}
Min Key MinKey()
map_value {
fields {
key: "__min__"
value {
null_value: NULL_VALUE
}
}
}
Max. Schlüssel MaxKey()
map_value {
fields {
key: "__max__"
value {
null_value: NULL_VALUE
}
}
}
Decimal128 Decimal128('4E7')
map_value {
fields {
key: "__decimal128__"
value {
string_value: "4E7"
}
}
}

Firestore-Typen, die nicht nativ in BSON sind

Diese Firestore-Typen werden bei der Konvertierung in BSON als speziell strukturierte Maps dargestellt.

Firestore-Typ BSON Firestore-Proto
GeoPoint
{
"__fs_geopoint__": {
"latitude": 37.42,
"longitude": -122.08
}
}
geo_point_value {
latitude: 37.42
longitude: -122.08
}
Vektor
{
"__fs_vector__": [
1.0,
2.0
]
}
map_value {
fields {
key: "__type__"
value {
string_value: "__vector__"
}
}
fields {
key: "value"
value {
array_value {
...
}
}
}
}
Dokumentreferenz
{
"__fs_ref__": "projects/.../documents/col/doc"
}
reference_value: "projects/.../documents/col/doc"

Feldnamen

Feldnamen aus MongoDB, die mit __.*__ übereinstimmen, werden beim Speichern in Firestore durch Einfügen von r: maskiert. Beispiel: Das BSON-Feld __foo__ wird in Firestore zu __r:foo__.

BSON-Datentypen in Client-SDKs

Wenn Sie Firestore-Client-SDKs verwenden, können Sie spezielle SDK-Klassen verwenden, um BSON-Datentypen wie 128-Bit-Dezimalzahlen, reguläre Ausdrücke und BSON-Zeitstempel darzustellen.

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
}
    

Nächste Schritte