我使用Firebase Hosting,并希望实现此Web应用程序。 (我使用Windows 10,Linux的Windows子系统,Debian 10.3和Google Chrome浏览器。)
在Cloud Functions(index.js)中,我在Firestore的script
集合中创建了一个新文档。
admin.firestore().collection('script').add({
text: transcription,
timestamp: admin.firestore.FieldValue.serverTimestamp()
});
在客户端(main.js)中,我使用onSnapshot
监听Firestore中的更改。但是,我不知道如何console.log
仅添加新文档。
如果我知道文档的ID(例如,G1pvc5LNojV4X7vfvpkI),则可以在main.js中执行此操作。但是,我不知道如何写新文档的ID。
firebase.firestore().collection('script').doc('G1pvc5LNojV4X7vfvpkI')
.onSnapshot(function(doc) {
console.log("Current data: ", doc.data());
});
您能告诉我如何写新文档的ID吗?
答案 0 :(得分:1)
未经过滤的集合查询将始终在第一个回调中返回集合中的所有文档。如果不需要所有文档,则仅需要过滤所需的文档。如果您不打算使用过滤器,那么快照侦听器将无法执行您的操作。
由于要在每个文档中写入时间戳,因此可以将其用作仅获取最新文档的过滤器,但这不一定能保证按您希望的方式工作。如果客户的日期有误,那么您可能找不到想要的东西。
如果要将集合中的新文档通知特定的客户,则可以使用FCM发送消息,但这将需要更多的工作。
答案 1 :(得分:1)
我认为您正在寻找:
firebase.firestore().collection('script').orderBy("timestamp", "desc").limit(1)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log("Current data: ", doc.data());
});
});
如果只想在附加侦听器后获取新文档,则可以使用以下方法将查询设置为仅在“ now”之后返回结果:
firebase.firestore().collection('script').orderBy("timestamp", "desc").startAt(new Date()).limit(1)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log("Current data: ", doc.data());
});
});
答案 2 :(得分:0)
快照具有键属性。您应该可以通过doc.key