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

На этой странице описываются типы данных, которые поддерживает Cloud Firestore .

Типы данных

В следующей таблице перечислены типы данных, поддерживаемые Cloud Firestore . Здесь также описан порядок сортировки, используемый при сравнении значений одного типа:

Тип данных Порядок сортировки Примечания
Множество По значениям элементов

Массив не может содержать в качестве одного из своих элементов другое значение массива.

Внутри массива элементы сохраняют назначенное им положение. При сортировке двух или более массивов массивы упорядочиваются на основе значений их элементов.

При сравнении двух массивов сравниваются первые элементы каждого массива. Если первые элементы равны, сравниваются вторые элементы и так далее, пока не будет найдено различие. Если в массиве закончились элементы для сравнения, но элементы до этого момента равны, то более короткий массив упорядочивается перед более длинным.

Например, [1, 2, 3] < [1, 2, 3, 1] < [2] . Массив [2] имеет наибольшее значение первого элемента. Массив [1, 2, 3] содержит элементы, равные первым трём элементам массива [1, 2, 3, 1] но имеет меньшую длину.

Булевое значение false < true
Байты Порядок байтов До 1 048 487 байт (1 МиБ — 89 байт). Запросы учитывают только первые 1500 байт.
Дата и время Хронологический При сохранении в Cloud Firestore точность составляет только до микросекунд; любая дополнительная точность округляется в меньшую сторону.
Число с плавающей точкой Числовой 64-битная двойная точность согласно IEEE 754 , включая (нормализованные) NaN и +/-Infinity .
Географическая точка По широте, затем по долготе В настоящее время мы не рекомендуем использовать этот тип данных из-за ограничений запросов. Как правило, лучше хранить широту и долготу в отдельных числовых полях. Если вашему приложению требуются простые геозапросы на основе расстояния, см. статью Геозапросы.
Целое число Числовой 64-бит, подписанный
Карта По ключам, затем по значению

Представляет объект, встроенный в документ. При индексировании можно выполнять запросы по подполям. Если исключить это значение из индексации, все подполя также будут исключены из индексации.

Ключевой порядок всегда сортируется. Например, если вы напишете {c: "foo", a: "bar", b: "qux"} карта будет отсортирована по ключу и сохранена как {a: "bar", b: "qux", c: "foo"} .

Поля карт сортируются по ключу и сравниваются по парам «ключ-значение». Сначала сравниваются ключи, а затем значения. Если первые пары «ключ-значение» равны, сравниваются следующие пары «ключ-значение» и так далее. Если у двух карт все пары «ключ-значение» одинаковы, учитывается длина карты. Например, следующие карты расположены в порядке возрастания:

{a: "aaa", b: "baz"}
{a: "foo", b: "bar"}
{a: "foo", b: "bar", c: "qux"}
{a: "foo", b: "baz"}
{b: "aaa", c: "baz"}
{c: "aaa"}

Нулевой Никто
Ссылка По элементам пути (коллекция, идентификатор документа, коллекция, идентификатор документа...) Например, projects/[PROJECT_ID]/databases/[DATABASE_ID]/documents/[DOCUMENT_PATH] .
Текстовая строка Порядок байтов в кодировке UTF-8 До 1 048 487 байт (1 МиБ — 89 байт). Запросы учитывают только первые 1500 байт представления UTF-8.
Вектор По измерению, а затем по значениям отдельных элементов Максимально поддерживаемая размерность вложения — 2048. Для хранения векторов с большими размерностями используйте уменьшение размерности .

Упорядочение типов значений

Когда запрос включает поле со значениями смешанных типов, Cloud Firestore использует детерминированный порядок, основанный на внутренних представлениях. Этот порядок показан в следующем списке:

  1. Нулевые значения
  2. Булевы значения
  3. Целые и плавающие значения, отсортированные по порядку чисел
  4. Значения дат
  5. Значения текстовой строки
  6. Значения байтов
  7. Ссылки Cloud Firestore
  8. Значения географических точек
  9. Значения массива
  10. Векторные вложения
  11. Значения карты

Числовой порядок

Cloud Firestore сортирует все числовые значения ( Integer и Floating point ), чередующиеся друг с другом. Сравнение чисел с плавающей точкой следует общему порядку IEEE 754, за исключением того, что Cloud Firestore нормализует все значения NaN и считает их меньшими -Infinity .