Поддерживаемые типы данных и драйверы MongoDB

В таблицах ниже перечислены поддерживаемые типы данных, драйверы и сторонние инструменты MongoDB для Cloud Firestore.

Типы данных

Тип BSON Поддерживается
32-битное целое число Да
64-битное целое число Да
Массив Да
Двоичные данные Да
Логическое значение Да
Дата Да
DBPointer Нет
Decimal128 Да
Двуспальная Да
JavaScript Нет
JavaScript (с областью видимости) Нет
MaxKey Да
MinKey Да
Null Да
Объект Да
ObjectId Да
Регулярное выражение Да
Строка Да
Символ Нет
Временная метка Да
Не определено Нет

Документ _id

Поле _id верхнего уровня в документе должно относиться к одному из следующих типов:

  • ObjectId
  • Строка
  • 64-битное целое число
  • 32-битное целое число
  • Двуспальная
  • Исполняемый файл
  • Объект
  • Логическое значение

Общий размер _id не должен превышать 1500 байт.

Каждое значение в идентификаторе типа Object также должно быть поддерживаемым типом идентификатора или массивом значений, каждое из которых является поддерживаемым типом идентификатора.

Другие типы BSON не поддерживаются.

Языки и драйверы MongoDB

Cloud Firestore поддерживает следующие версии драйверов:

Язык Версии драйверов
Java 5.x
Node.js 6.x
5.x
Python 4.x
3.x (x ≥ 12)
Проложить маршрут 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 Database Tools Подробнее о массовой загрузке данных …
mongoexport MongoDB Database Tools
mongodump MongoDB Database Tools
mongorestore MongoDB Database Tools Подробнее о массовой загрузке данных …
mongosh MongoDB Shell
Mongoose Инструмент моделирования объектов MongoDB
MongoDB Compass Инструмент с графическим интерфейсом для исследования данных

Совместимость типов BSON и Cloud Firestore

В этом разделе описывается сопоставление типов MongoDB BSON и значений Cloud Firestore. Поскольку BSON – это двоичный формат, а в Cloud Firestore API используются буферы протокола, некоторые типы сопоставляются напрямую, а для других требуются специальные представления.

Обзор сопоставления

В таблицах ниже показано, как типы данных BSON соответствуют представлениям буфера протокола Cloud Firestore.

Прямые сопоставления

У этих типов есть прямые эквиваленты в обеих системах.

Тип BSON BSON Cloud Firestore Proto Примечания
Double 1.23 double_value: 1.23
Строка "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"
}
}
Binary (Subtype Zero) 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
}
}
}
Двоичный (ненулевой подтип) 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

При преобразовании в BSON эти типы Cloud Firestore представляются в виде карт со специальной структурой.

Тип Cloud Firestore BSON Cloud Firestore Proto
GeoPoint
{
"__fs_geopoint__": {
"latitude": 37.42,
"longitude": -122.08
}
}
geo_point_value {
latitude: 37.42
longitude: -122.08
}
Векторные изображения
{
"__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__ в Cloud Firestore преобразуется в __r:foo__.

Типы данных 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);
    
Проложить маршрут
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
}
    

Дальнейшие действия