Установка orderBy в StructuredQuery с использованием Firestore REST API

первый пост, так что любые советы будут оценены. Я пытаюсь установить orderBy в StructuredQuery, используя REST api для firestore. Также полезно отметить, что мой запрос работает, если поле orderBy не используется.

Мой запрос выглядит так:

var collection = "testing";
var Query = {        //body of the http request
  "structuredQuery": {
    "from": {
      "collectionId":collection,
      "allDescendants":true
    },
    "orderBy": {
      "field": {
        "fieldPath" : "uploaded"
      },
      "direction" : "DESCENDING"
    },
    "limit": 1
  },
  "newTransaction": {}
}
var urlPOST = "https://firestore.googleapis.com/v1beta1/projects/"+id+"/databases/"+database+"/documents:runQuery?key = "+key;
var optPOST = {                //http header
  'method' : 'post',
  'contentType' : 'application/json',
  'muteHttpExceptions': true,
  'payload': JSON.stringify(Query)
};
var response = UrlFetchApp.fetch(urlPOST, optPOST);

из этого запроса я получаю:

"error": {
  "code": 400,
  "message": "The query requires a COLLECTION_GROUP_DESC index for collection testing and field uploaded. You can create it here: https://console.firebase.google.com/project/<mydatabase>/database/firestore/indexes/single-field ",
    "status": "FAILED_PRECONDITION"
}

Документ API Google Firestore говорит, что он должен дать мне ссылку для создания необходимого индекса, но возвращенная здесь ссылка не делает этого, вместо этого она возвращает меня на страницу обзора.

Еще немного о том, что я пытаюсь сделать: Я хочу получить последний загруженный документ из базы данных. Я делаю это, имея поле 'загружено', которое является просто полем TimeStamp (загруженным через скрипт python с использованием библиотеки firestore_admin, вызывающей firestore.SERVER_TIMESTAMP)

Сообщите мне, если потребуется дополнительная информация

Заранее спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
2 060
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TL; DR - поле allDescendants в данный момент не делает ничего полезного, и вам не следует его использовать. Это было включено в протокол в ожидании функции под названием «Групповые запросы коллекции», которая еще не запущена.


Как видите, в каждом запросе Firestore есть parent и целевой collectionId, в дополнение к другим условиям ограничения.

В вашем случае parent - это /projects/$YOUR_PROJECT/datbases/(default)/, так что в основном это корень вашей БД. collectionId - это имя коллекции, в которой вы ищете документы, которую вы указали как testing.

Если allDescendants имеет значение false, поиск будет выполняться только в коллекциях с таким именем, которые являются прямым потомком родительского элемента. В данном случае это означает, что поиск будет выполнен в коллекции /testing.

Если для allDescendants установлено значение true, поиск будет охватывать любая коллекция с именем "testing" на любой глубине ниже родительской. Так что не только /testing, но и что-то вроде /widgets/foo/testing. Однако для выполнения этого запроса требуется то, что мы называем индексом «группы сбора», как указано в сообщении об ошибке. Прямо сейчас у вас нет возможности создать такой индекс, поэтому я сказал выше, что этот параметр в основном бесполезен.

Как мы заявляли на некоторых других форумах, мы намерены выпустить этот тип запросов в будущем, и в этом случае параметр allDescendants будет более полезным.

Другие вопросы по теме