Как запросить базу данных Firebase Realtime с помощью функций Google Cloud - PullRequest
0 голосов
/ 17 июня 2019

Я пытался решить эту проблему в течение нескольких дней ... Любая помощь очень ценится.

Я пытаюсь создать облачную функцию Firebase, которая вызывается из паба / подраздела ('ETACheck'),Спусковая часть работает нормально.Когда облачная функция вызывается, она сканирует базу данных Firebase в поисках всех записей, где ключ «ECT» равен «».Вот как организованы данные:

enter image description here

Вот фрагмент кода:

exports.CheckETAResponse = functions.pubsub.topic('ETACheck').onPublish((message, context) => {
   console.log('The function was triggered at ', context.timestamp);
   console.log('The unique ID for the event is', context.eventId);
   var db = admin.database();
    var ref = db.ref('{company}/Requisitions/{store}');
    return ref.orderByChild('ECT').equalTo('').on('value')
        .then((snapshot) => {
        if (snapshot !== null) {
            const data = snapshot.val();
            console.log('Data',data);
        }
        else {
            console.log('Snapshot is null');
        }
        return null;
    })
    .catch((error) => console.log('Error',error))

});

И ошибка из Firebase (data = null):

enter image description here

Я изменил запрос на «.on ('child_added') и получил следующую ошибку:

enter image description here

1 Ответ

0 голосов
/ 18 июня 2019

Эти типы подстановочных знаков в db.ref('{company}/Requisitions/{store}') возможны только в объявлениях облачных функций, но не в других путях к базе данных. Запросы Firebase работают на модели плоского списка дочерних узлов. Нет способа найти все вложенные дочерние узлы в Requisitions, которые имеют ECT == "". Вы можете искать под Requisitions/001, но не под всеми Requisitions/*.

Рассмотрите возможность добавления инвертированного индекса, который разрешает этот тип поиска:

EmptyECTs: {
  "Requestion/001/-Lhv...": true
}

Это позволяет легко читать узлы.

Подробнее об этом см. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...