Как запросить и найти все подходящие телефонные номера в коллекции /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);
});
Является ли подобная структура сбора оптимальной для этого решения? Есть ли способ упростить его или пропустить поиск по коллекциям каждый раз?