Driver dan jenis data MongoDB yang didukung

Tabel berikut mencantumkan alat pihak ketiga, driver, dan jenis data MongoDB yang didukung untuk Firestore dengan kompatibilitas MongoDB.

Jenis data

Jenis BSON Didukung
Bilangan Bulat 32-bit Ya
Bilangan Bulat 64-bit Ya
Array Ya
Data Program Biner Ya
Boolean Ya
Tanggal Ya
DBPointer Tidak
Decimal128 Ya
Ganda Ya
JavaScript Tidak
JavaScript (dengan cakupan) Tidak
MaxKey Ya
MinKey Ya
Null Ya
Objek Ya
ObjectId Ya
Ekspresi Reguler Ya
String Ya
Simbol Tidak
Stempel waktu Ya
Belum ditentukan Tidak

Dokumen _id

Bidang _id level teratas dalam dokumen harus berupa salah satu jenis berikut:

  • ObjectId
  • String
  • Bilangan Bulat 64-bit
  • Bilangan Bulat 32-bit
  • Ganda
  • Biner
  • Objek
  • Boolean

Total ukuran _id tidak boleh melebihi 1.500 byte.

Setiap nilai dalam ID berjenis Object juga harus berupa jenis ID yang didukung atau Array nilai, yang masing-masing berupa jenis ID yang didukung.

Jenis BSON lainnya tidak didukung.

Bahasa dan driver MongoDB

Firestore dengan kompatibilitas MongoDB mendukung versi driver berikut:

Bahasa Versi driver
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)

Dukungan autentikasi OIDC

Driver Go, C#, dan Ruby mendukung autentikasi OpenID Connect (OIDC) dari Google Cloud untuk semua versi driver yang didukung.

Driver Java, Node.js, dan Python mendukung autentikasi OIDC dari Google Cloud mulai dengan versi driver berikut:

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

Alat pihak ketiga

Firestore dengan kompatibilitas MongoDB mendukung alat pihak ketiga yang dijelaskan di bagian ini.

Alat Deskripsi Catatan
mongoimport Alat Database MongoDB Lihat Pemuatan data massal
mongoexport Alat Database MongoDB
mongodump Alat Database MongoDB
mongorestore Alat Database MongoDB Lihat Pemuatan data massal
mongosh Shell MongoDB
Mongoose Alat pemodelan objek MongoDB
MongoDB Compass Alat GUI untuk eksplorasi data

Kompatibilitas jenis BSON dan Firestore

Bagian ini merangkum pemetaan antara jenis BSON MongoDB dan nilai Firestore. Karena BSON adalah format biner dan Firestore API menggunakan Protocol Buffers, beberapa jenis dipetakan secara langsung, sementara jenis lainnya memerlukan representasi peta khusus.

Ringkasan pemetaan

Tabel berikut menunjukkan bagaimana jenis data BSON sesuai dengan representasi buffering protokol Firestore.

Pemetaan langsung

Jenis ini memiliki padanan langsung di kedua sistem.

Jenis BSON BSON Firestore Proto Catatan
Double 1.23 double_value: 1.23
String "hello" string_value: "hello"
Benda di jalan
{
"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"
}
}
Biner (Subjenis Nol) BinData(0, 'SGVsbG8=') bytes_value: "Hello"
Boolean true boolean_value: true
Null null null_value: NULL_VALUE
Bilangan Bulat 64-bit Long('1234567890') integer_value: 1234567890
Tanggal ISODate('2026-05-22T04:00:00Z')
timestamp_value {
seconds: 1779470400
nanos: 0
}
Nilai stempel waktu Firestore disimpan dengan presisi mikrodetik, tetapi apa pun yang melebihi presisi milidetik akan hilang saat dikonversi ke BSON.

Jenis BSON yang direpresentasikan sebagai peta di Firestore API

Jenis BSON ini digabungkan dalam map_value Firestore dengan kunci khusus untuk menunjukkan jenisnya.

Jenis BSON BSON Firestore Proto Catatan
Bilangan Bulat 32-bit 123
map_value {
fields {
key: "__int__"
value {
integer_value: 123
}
}
}
Biner (Subjenis Bukan Nol) BinData(1, 'AQIDBA==')
map_value {
fields {
key: "__binary__"
value {
bytes_value: "<subtype + data>"
}
}
}
Byte subjenis ditambahkan ke data.
ObjectId ObjectId('67eea9446dc71ec469e9496a')
map_value {
fields {
key: "__oid__"
value {
string_value:
"67eea9446dc71ec469e9496a"
}
}
}
String hex huruf kecil.
Stempel waktu (Internal) 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
}
}
}
}
}
}
Stempel waktu internal MongoDB.
Ekspresi Reguler RegExp('.*', 'im')
map_value {
fields {
key: "__regex__"
value {
map_value {
fields {
key: "pattern"
value {
string_value: ".*"
}
}
fields {
key: "options"
value {
string_value: "im"
}
}
}
}
}
}
Kunci Min MinKey()
map_value {
fields {
key: "__min__"
value {
null_value: NULL_VALUE
}
}
}
Kunci Maks MaxKey()
map_value {
fields {
key: "__max__"
value {
null_value: NULL_VALUE
}
}
}
Decimal128 Decimal128('4E7')
map_value {
fields {
key: "__decimal128__"
value {
string_value: "4E7"
}
}
}

Jenis Firestore yang tidak ada secara native di BSON

Jenis Firestore ini direpresentasikan sebagai peta terstruktur khusus saat dikonversi ke BSON.

Jenis Firestore 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 {
...
}
}
}
}
Referensi Dokumen
{
"__fs_ref__": "projects/.../documents/col/doc"
}
reference_value: "projects/.../documents/col/doc"

Nama kolom

Nama kolom dari MongoDB yang cocok dengan __.*__ akan di-escape dengan menyertakan r: saat disimpan di Firestore. Misalnya, kolom BSON __foo__ menjadi __r:foo__ di Firestore.

Jenis data BSON di SDK klien

Saat menggunakan SDK klien Firestore, Anda dapat menggunakan class SDK khusus untuk merepresentasikan jenis data BSON seperti desimal 128-bit, ekspresi reguler, dan stempel waktu 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
}
    

Langkah berikutnya