первый пост, так что любые советы будут оценены. Я пытаюсь установить 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)
Сообщите мне, если потребуется дополнительная информация
Заранее спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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 будет более полезным.