ไดรเวอร์และประเภทข้อมูล MongoDB ที่รองรับ

ตารางต่อไปนี้แสดงประเภทข้อมูล MongoDB, ไดรเวอร์ และเครื่องมือของบุคคลที่สามที่รองรับสำหรับ Cloud Firestore

ประเภทข้อมูล

ประเภท BSON รองรับ
จำนวนเต็ม 32 บิต ใช่
จำนวนเต็ม 64 บิต ใช่
อาร์เรย์ ใช่
ข้อมูลไบนารี ใช่
บูลีน ใช่
วันที่ ใช่
DBPointer ไม่
Decimal128 ใช่
เตียงคู่ ใช่
JavaScript ไม่
JavaScript (พร้อมขอบเขต) ไม่
MaxKey ใช่
MinKey ใช่
Null ใช่
ออบเจ็กต์ ใช่
ObjectId ใช่
นิพจน์ทั่วไป ใช่
สตริง ใช่
สัญลักษณ์ ไม่
การประทับเวลา ใช่
ไม่ระบุ ไม่

เอกสาร _id

ฟิลด์ _id ระดับบนสุดในเอกสารต้องเป็นประเภทใดประเภทหนึ่งต่อไปนี้

  • ObjectId
  • สตริง
  • จำนวนเต็ม 64 บิต
  • จำนวนเต็ม 32 บิต
  • เตียงคู่
  • ไบนารี
  • ออบเจ็กต์
  • บูลีน

ขนาดรวมของ _id ต้องไม่เกิน 1,500 ไบต์

ค่าแต่ละค่าภายในรหัสประเภทออบเจ็กต์ต้องเป็นประเภทรหัสที่รองรับหรืออาร์เรย์ของค่า ซึ่งแต่ละค่าเป็นประเภทรหัสที่รองรับ

ระบบไม่รองรับ BSON ประเภทอื่นๆ

ภาษาและไดรเวอร์ MongoDB

Cloud Firestore รองรับไดรเวอร์เวอร์ชันต่อไปนี้

Language เวอร์ชันไดรเวอร์
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 รองรับการตรวจสอบสิทธิ์ OpenID Connect (OIDC) จาก Google Cloud สำหรับไดรเวอร์ทุกเวอร์ชันที่รองรับ

ไดรเวอร์ Java, Node.js และ Python รองรับการตรวจสอบสิทธิ์ OIDC จาก Google Cloud โดยเริ่มจากไดรเวอร์เวอร์ชันต่อไปนี้

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

เครื่องมือของบุคคลที่สาม

Cloud Firestore รองรับเครื่องมือของบุคคลที่สามที่อธิบายไว้ในส่วนนี้

เครื่องมือ คำอธิบาย หมายเหตุ
mongoimport เครื่องมือฐานข้อมูล MongoDB ดู การโหลดข้อมูลจำนวนมาก
mongoexport เครื่องมือฐานข้อมูล MongoDB
mongodump เครื่องมือฐานข้อมูล MongoDB
mongorestore เครื่องมือฐานข้อมูล MongoDB ดู การโหลดข้อมูลจำนวนมาก
mongosh MongoDB Shell
Mongoose เครื่องมือการสร้างโมเดลออบเจ็กต์ MongoDB
MongoDB Compass เครื่องมือ GUI สำหรับการสำรวจข้อมูล

ความเข้ากันได้ของประเภท BSON และ Cloud Firestore

ส่วนนี้จะสรุปการแมประหว่างประเภท BSON ของ MongoDB กับค่า Cloud Firestore เนื่องจาก BSON เป็นรูปแบบไบนารีและ Cloud Firestore API ใช้บัฟเฟอร์โปรโตคอล บางประเภทจึงแมปโดยตรง ขณะที่บางประเภทต้องใช้การแสดงแผนที่แบบพิเศษ

ภาพรวมการแมป

ตารางต่อไปนี้แสดงความสอดคล้องของประเภทข้อมูล BSON กับการแสดงบัฟเฟอร์โปรโตคอล Cloud Firestore

การแมปโดยตรง

ประเภทเหล่านี้มีค่าที่เทียบเท่ากันโดยตรงในทั้ง 2 ระบบ

ประเภท BSON BSON Cloud Firestore Proto หมายเหตุ
Double 1.23 double_value: 1.23
สตริง "hello" string_value: "hello"
วัตถุ
{
"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"
}
}
ไบนารี (ประเภทย่อย 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 {
seconds: 1779470400
nanos: 0
}
ค่าการประทับเวลา Cloud Firestore จะจัดเก็บไว้ที่ความแม่นยำระดับไมโครวินาที แต่ค่าที่เกินความแม่นยำระดับมิลลิวินาทีจะสูญหายเมื่อแปลงเป็น BSON

ประเภท BSON ที่แสดงเป็นแผนที่ใน Cloud Firestore API

ประเภท BSON เหล่านี้จะรวมอยู่ใน Cloud Firestore map_value พร้อมคีย์พิเศษเพื่อระบุประเภท

ประเภท BSON BSON Cloud Firestore Proto หมายเหตุ
จำนวนเต็ม 32 บิต 123
map_value {
fields {
key: "__int__"
value {
integer_value: 123
}
}
}
ไบนารี (ประเภทย่อยที่ไม่ใช่ 0) BinData(1, 'AQIDBA==')
map_value {
fields {
key: "__binary__"
value {
bytes_value: "<subtype + data>"
}
}
}
ไบต์ประเภทย่อยที่เพิ่มไว้หน้าข้อมูล
ObjectId ObjectId('67eea9446dc71ec469e9496a')
map_value {
fields {
key: "__oid__"
value {
string_value:
"67eea9446dc71ec469e9496a"
}
}
}
สตริงเลขฐานสิบหกตัวพิมพ์เล็ก
การประทับเวลา (ภายใน) 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
}
}
}
}
}
}
การประทับเวลาภายในของ MongoDB
นิพจน์ทั่วไป 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 Key MaxKey()
map_value {
fields {
key: "__max__"
value {
null_value: NULL_VALUE
}
}
}
Decimal128 Decimal128('4E7')
map_value {
fields {
key: "__decimal128__"
value {
string_value: "4E7"
}
}
}

Cloud Firestore ประเภทที่ไม่ได้อยู่ใน BSON โดยตรง

ประเภท Cloud Firestore เหล่านี้จะแสดงเป็นแผนที่ที่มีโครงสร้างพิเศษเมื่อแปลงเป็น BSON

ประเภท Cloud Firestore BSON Cloud Firestore Proto
GeoPoint
{
"__fs_geopoint__": {
"latitude": 37.42,
"longitude": -122.08
}
}
geo_point_value {
latitude: 37.42
longitude: -122.08
}
Vector
{
"__fs_vector__": [
1.0,
2.0
]
}
map_value {
fields {
key: "__type__"
value {
string_value: "__vector__"
}
}
fields {
key: "value"
value {
array_value {
...
}
}
}
}
Document Ref
{
"__fs_ref__": "projects/.../documents/col/doc"
}
reference_value: "projects/.../documents/col/doc"

ชื่อฟิลด์

ชื่อช่องจาก MongoDB ที่ตรงกับ __.*__ จะถูกยกเว้นโดยการรวม r: เมื่อจัดเก็บไว้ใน Cloud Firestore เช่น ฟิลด์ BSON __foo__ จะกลายเป็น __r:foo__ ใน Cloud Firestore

ประเภทข้อมูล BSON ใน SDK ของไคลเอ็นต์

เมื่อใช้ SDK ไคลเอ็นต์ Cloud Firestore คุณสามารถใช้คลาส SDK เฉพาะเพื่อแสดงประเภทข้อมูล BSON เช่น ทศนิยม 128 บิต นิพจน์ทั่วไป และการประทับเวลา 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
}
    

ขั้นตอนถัดไป