如何使用node读取在Firestore中创建的最新文档?
How to read the latest document created in Firestore using node?
我写了一个云函数,用于在我的数据库中监听集合中的文档创建
这里是函数,
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 字段中,我有一组设备令牌,我想向其发送通知,
我希望该功能仅向刚刚创建(在新创建的文档中)的设备(使用令牌)发送通知,然后删除该文档。
我认为它会同时向所有文档发送通知。
我是 node 新手..
有没有办法只向一个文档(..最新创建的文档)中存在的设备令牌发送通知?..我认为它是向所有人发送通知。
请帮帮我。
更新:- 这是我的文档结构
首先,在 onCreate 处理程序中,您可以通过 snap 对象访问刚刚创建的文档的 ID,您可以通过 snapshot.id
访问 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”
我写了一个云函数,用于在我的数据库中监听集合中的文档创建
这里是函数,
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 字段中,我有一组设备令牌,我想向其发送通知,
我希望该功能仅向刚刚创建(在新创建的文档中)的设备(使用令牌)发送通知,然后删除该文档。
我认为它会同时向所有文档发送通知。
我是 node 新手..
有没有办法只向一个文档(..最新创建的文档)中存在的设备令牌发送通知?..我认为它是向所有人发送通知。
请帮帮我。
更新:- 这是我的文档结构
首先,在 onCreate 处理程序中,您可以通过 snap 对象访问刚刚创建的文档的 ID,您可以通过 snapshot.id
访问 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”