Как прочитать последний документ, созданный в Firestore с помощью узла? - PullRequest
1 голос
/ 07 августа 2020

Я написал облачную функцию для прослушивания создания документа в коллекции, в моей базе данных

вот функция,

const functions = require('firebase-functions');
const admin = require('firebase-admin');
 
admin.initializeApp(functions.config().functions);
 
var newData;
 
exports.myTrigger = functions.firestore.document('FCM/{id}').onCreate(async (snapshot, context) => {
    //
 
    if (snapshot.empty) {
        console.log('No Devices');
        return;
    }
 
    newData = 'hello';
 
    const deviceIdTokens = await admin
        .firestore()
        .collection('FCM')
        .get();
 
 var tokens = [];
 var i=0;
    for (var token of deviceIdTokens.docs) {
        tokens.push(token.data().ar1[i]);
        i++;
    }
    var payload = {
        notification: {
            title: 'push title',
            body: 'push body',
            sound: 'default',
        },
        data: {
            push_key: 'Push Key Value',
            key1: newData,
        },
    };
 
    try {
        const response = await admin.messaging().sendToDevice(tokens, payload);
        console.log('Notification sent successfully');

        
    } catch (err) {
        console.log(err);
    }
});

Эта функция работает странно,

Например, иногда он отправляет уведомление, а иногда нет.

Я не знаю, как решить эту проблему,

В моем поле arr1 у меня есть массив устройств токены, которым я хочу отправлять уведомления,

Я хочу, чтобы функция отправляла уведомления только на устройства (с использованием токенов), которые только что были созданы (во вновь созданном документе), а затем удалите документ.

Думаю, он отправляет уведомления сразу всем документам.

Я новичок в узле ..

Есть ли способ отправлять уведомления только на имеющиеся токены устройства только в одном документе (.. последний созданный документ)? .. Я думаю, он отправляет уведомления всем.

пожалуйста, помогите мне.

ОБНОВЛЕНИЕ: - Вот моя структура документа это не моя структура документа

1 Ответ

1 голос
/ 07 августа 2020

Во-первых, в обработчике onCreate вы можете получить доступ к идентификатору только что созданного документа через объект привязки, вы можете получить доступ к идентификатору через snapshot.id и к телу через snapshot.data().

У вас уже есть только что созданный документ, поэтому нет необходимости извлекать всю коллекцию. Вы должны заменить весь этот раздел:

const deviceIdTokens = await admin
.firestore()
.collection('FCM')
.get();
 
 var tokens = [];
 var i=0;
 for (var token of deviceIdTokens.docs) {
    tokens.push(token.data().ar1[i]);
    i++;
 }

следующим:

const tokens = snapshot.data().ar1;

ОБНОВЛЕНИЕ: Чтобы удалить новый документ, вы можете сделать

await firestore().collection("FCM").doc(snapshot.id).delete();

, поскольку новый документ принадлежит коллекции FCM, а не helpReqs

...