Невозможно получить документы по дате из Firebase в Google Cloud Pub / Sub Function - PullRequest
1 голос
/ 01 мая 2020

У меня работает функция pub / sub, которая при запуске извлекает все документы из коллекции Firebase, где date находится сегодня.

Протестировал код в среде локального (не pubsub) узла и работает отлично, но при публикации он не может найти никаких документов, но может найти его в локальной версии.

Я предполагаю, что это как-то связано с прошедшей датой, но я не понимаю, почему это будет работать локально, но не в этой функции pub / sub?

export const check_orders = functions.pubsub.schedule('0 9 * * *').timeZone('Europe/London').onRun(async context => {

     const currentDate = moment();
     currentDate.set({hour: 0, minute: 0, second: 0, millisecond: 0});
     console.log('currentDate:', currentDate);

     const toDate = currentDate.toDate();
     console.log('toDate:', toDate);

     const currentDateTimestamp = admin.firestore.Timestamp.fromDate(currentDate.toDate());
     console.log('currentDateTimestamp:', currentDateTimestamp);

     const query = db.collection('orders').where('delivery.delivery_due', '==', toDate).where('user_status', '==', 'active');
     const tasks = await query.get();

...
}

Когда это срабатывает, currentDate будет регистрировать: moment("2020-05-01T00:00:00.000")

Я также попытался добавить toDate() к currentDate, что будет регистрировать 2020-05-01T00:00:00.000Z. Также не удается найти какие-либо документы.

Добавлен еще один тест для преобразования даты в метку времени Firebase, которая выводит Timestamp { _seconds: 1588291200, _nanoseconds: 0 }, но по-прежнему не получает никаких документов.

Если I l oop через приведенный выше код в локальном тесте я получу обратно 1 документ, но pub / sub не вернет ни одного. Протестировано удаление только тех документов, где status = active, и это успешно, так что это наверняка связано с датой.

Дата тестового документа delivery_due установлена ​​на сегодняшний день, а user_status установлена ​​на active, поэтому данные в документе соответствуют ожидаемым.

Example data from document

Я что-то упустил?

1 Ответ

1 голос
/ 01 мая 2020

У вас проблема с различиями часовых поясов. Ваша дата от момента измеряется в UT C (это означает, что "Z" означает в конце записанной строки currentDate), но ваша дата в поле отметки времени измеряется в UTC + 1. Они оба говорят «полночь», но поскольку они находятся в разных часовых поясах, они не ссылаются на один и тот же момент времени, поэтому ваш запрос не совпадает.

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

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