Запросите всех пользователей с соответствующим номером телефона в Firestore, используя функции Cloud - PullRequest
0 голосов
/ 02 марта 2020

Как запросить и найти все подходящие телефонные номера в коллекции /users на основе информации из другой коллекции?

У меня есть две коллекции в Firestore

  • /users/{userId}/tokens/{tokenId}/ - user содержит phone и token содержит token, необходимое для отправки pu sh уведомления
  • /events/{eventId}/participants/{participantId} - participant содержит phone

Я пишу onWrite функцию для events в Cloud Firestore - когда кто-то создаст новый Event Я хочу взять все Participants phone и использовать его для поиска в коллекции users. Если Participant phone == User phone Я хочу взять все его токены из коллекции /tokens и отправить ему уведомление.

Вопрос: Как я могу запросить это в TypeScript? Я застрял в этой точке:

const db = admin.firestore();
const fcm = admin.messaging();

export const sendToDevice = functions.firestore
  .document('events/{eventId}/participants/{participantId}')
  .onCreate(async snapshot => {

    const participant = snapshot.data();

    const querySnapshot = await db
      .collection('users')
      .where('phone', '==', participant.get('phone'))
      .collection('tokens')
      .get();

    const tokens = querySnapshot.docs.map(snap => snap.id);

    const payload: admin.messaging.MessagingPayload = {
      notification: {
        title: 'New Event!',
        body: `You have been invited!`,
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
      }
    };

    return fcm.sendToDevice(tokens, payload);
  });


Является ли подобная структура сбора оптимальной для этого решения? Есть ли способ упростить его или пропустить поиск по коллекциям каждый раз?

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