Obsługiwane typy danych i sterowniki MongoDB

W poniższych tabelach znajdziesz obsługiwane typy danych MongoDB, sterowniki i narzędzia innych firm dla Cloud Firestore.

Typy danych

Typ BSON Obsługiwane
32-bitowa liczba całkowita Tak
64-bitowa liczba całkowita Tak
Tablica Tak
Dane binarne Tak
Wartość logiczna Tak
Data Tak
DBPointer Nie
Decimal128 Tak
Liczba zmiennoprzecinkowa Tak
JavaScript Nie
JavaScript (z zakresem) Nie
MaxKey Tak
MinKey Tak
Null Tak
Obiekt Tak
ObjectId Tak
Wyrażenie regularne Tak
Ciąg znaków Tak
Symbol Nie
Sygnatura czasowa Tak
Nie określono Nie

_id dokumentu

Pole _id najwyższego poziomu w dokumencie musi być jednego z tych typów:

  • ObjectId
  • Ciąg znaków
  • 64-bitowa liczba całkowita
  • 32-bitowa liczba całkowita
  • Liczba zmiennoprzecinkowa
  • Binarne
  • Obiekt
  • Wartość logiczna

Łączny rozmiar _id nie może przekraczać 1500 bajtów.

Każda wartość w identyfikatorze typu Object musi być również obsługiwanym typem identyfikatora lub tablicą wartości, z których każda jest obsługiwanym typem identyfikatora.

Inne typy BSON nie są obsługiwane.

Języki i sterowniki MongoDB

Cloud Firestore obsługuje te wersje sterowników:

Język Wersje sterowników
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)

Obsługa uwierzytelniania OIDC

Sterowniki Go, C# i Ruby obsługują uwierzytelnianie OpenID Connect (OIDC) z Google Cloud we wszystkich obsługiwanych wersjach sterowników.

Sterowniki Java, Node.js i Python obsługują uwierzytelnianie OIDC z Google Cloud, począwszy od tych wersji sterowników:

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

Narzędzia innych firm

Cloud Firestore obsługuje narzędzia innych firm opisane w tej sekcji.

Narzędzie Opis Notes
mongoimport Narzędzia bazy danych MongoDB Zobacz Zbiorcze wczytywanie danych .
mongoexport Narzędzia bazy danych MongoDB
mongodump Narzędzia bazy danych MongoDB
mongorestore Narzędzia bazy danych MongoDB Zobacz Zbiorcze wczytywanie danych .
mongosh Powłoka MongoDB
Mongoose Narzędzie do modelowania obiektów MongoDB
MongoDB Compass Narzędzie GUI do eksploracji danych

Zgodność typów BSON i Cloud Firestore

Ta sekcja zawiera podsumowanie mapowania między typami BSON MongoDB a wartościami Cloud Firestore. BSON jest formatem binarnym, a interfejs API Cloud Firestore używa buforów protokołu, dlatego niektóre typy są mapowane bezpośrednio, a inne wymagają specjalnych reprezentacji map.

Omówienie mapowania

W tabelach poniżej znajdziesz informacje o tym, jak typy danych BSON odpowiadają reprezentacjom buforów protokołu Cloud Firestore.

Mapowania bezpośrednie

Te typy mają bezpośredni odpowiednik w obu systemach.

Typ BSON BSON Cloud Firestore Proto Uwagi
Double 1.23 double_value: 1.23
Tekst "hello" string_value: "hello"
Obiekt
{
"a": 1.23
}
map_value {
fields {
key: "a"
value {
double_value: 1.23
}
}
}
Tablica
[
1.23,
"a"
]
array_value {
values {
double_value: 1.23
}
values {
string_value: "a"
}
}
Binary (Subtype Zero) BinData(0, 'SGVsbG8=') bytes_value: "Hello"
Wartość logiczna true boolean_value: true
Null null null_value: NULL_VALUE
64-bitowa liczba całkowita Long('1234567890') integer_value: 1234567890
Data ISODate('2026-05-22T04:00:00Z')
timestamp_value {
seconds: 1779470400
nanos: 0
}
Wartości sygnatur czasowych Cloud Firestore są przechowywane z dokładnością do mikrosekund, ale podczas konwersji na format BSON tracona jest dokładność większa niż milisekunda.

Typy BSON reprezentowane jako mapy w interfejsie API Cloud Firestore

Te typy BSON są opakowane w Cloud Firestore map_value ze specjalnymi kluczami oznaczającymi typ.

Typ BSON BSON Cloud Firestore Proto Uwagi
32-bitowa liczba całkowita 123
map_value {
fields {
key: "__int__"
value {
integer_value: 123
}
}
}
Binarny (podtyp niezerowy) BinData(1, 'AQIDBA==')
map_value {
fields {
key: "__binary__"
value {
bytes_value: "<subtype + data>"
}
}
}
Bajt podtypu dodany na początku danych.
ObjectId ObjectId('67eea9446dc71ec469e9496a')
map_value {
fields {
key: "__oid__"
value {
string_value:
"67eea9446dc71ec469e9496a"
}
}
}
Ciąg szesnastkowy składający się z małych liter.
Sygnatura czasowa (wewnętrzna) 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
}
}
}
}
}
}
Wewnętrzna sygnatura czasowa MongoDB.
Wyrażenie regularne 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
}
}
}
Tryb maksymalny MaxKey()
map_value {
fields {
key: "__max__"
value {
null_value: NULL_VALUE
}
}
}
Decimal128 Decimal128('4E7')
map_value {
fields {
key: "__decimal128__"
value {
string_value: "4E7"
}
}
}

Typy Cloud Firestore nie są natywnie obsługiwane w BSON

Te typy Cloud Firestore są reprezentowane jako specjalnie ustrukturyzowane mapy po przekonwertowaniu na BSON.

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

Nazwy pól

Nazwy pól z MongoDB, które pasują do __.*__, są przekształcane przez dodanie r:, gdy są przechowywane w Cloud Firestore. Na przykład pole BSON __foo__ staje się polem __r:foo__ w Cloud Firestore.

Typy danych BSON w pakietach SDK klienta

Jeśli używasz pakietów SDK klienta Cloud Firestore, możesz używać specjalistycznych klas pakietu SDK do reprezentowania typów danych BSON, takich jak 128-bitowe liczby dziesiętne, wyrażenia regularne i sygnatury czasowe 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

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
}
    

Co dalej?