据我所知,我可以使用 onSapshot()代替 get()进行查询,并听取其更改(添加,删除,修改)查询。但是,当发生更改时,onSnaphot()会返回多个完整文档,无论是已修改,删除还是添加的(新快照)。我想做的是,检查是否已添加与我的查询匹配的新文档,并向用户显示有新记录可用的通知,并且只有单击按钮时,它们才能够获取并查看新记录。记录。发生更改时,我不想从Firestore中获取整套文档。我只想了解这些更改并按需获取。并仅获取添加的内容。
我该怎么做?有任何想法吗?
顺便说一句,我正在为我的应用程序使用react-native。
P.S。 -我知道,我可以定期运行查询并检查新查询中第一项的ID是否与上一次查询中的第一项ID匹配,因此我可以检测到添加的记录并显示我的通知/按钮。但是我正在寻找一个更优雅的解决方案。我认为通知应该从后端触发,而不是定期轮询后端。
P.S。 2-使用云功能似乎不是一个合理的选择,因为这些查询对于我应用程序的每个用户都是不同的。这将需要在Firestore上运行数千个功能(希望有更多功能)。还是会?
谢谢!
答案 0 :(得分:1)
在Firestore API中,如果不实际检索更改的文档,就无法获得有关查询更改的通知。但是,当然可以在调用onSnapshot
回调时仅向用户显示通知,然后仅在用户选择刷新UI时显示这些文档中的实际数据。
第二点,当您使用快照侦听器时,Firestore客户端将仅在其他回调中检索修改后的文档。
假设您为与10个文档匹配的查询附加了一个侦听器。在第一个onSnapshot
回调中,您将获得10个文档,并需要为10次文档读取付费。现在说文档之一发生了变化。当为此调用onSnapshot
回调时,您将再次看到10个文档,但是对于已更改的文档,将只收取1次读取费用。
如果只想处理更改,请查看viewing changes between snapshots上的文档,其中包含一个很好的示例,说明如何使用docChanges()
方法执行此操作。