如何仅从Firestore获取新更新的数据?

时间:2018-09-15 19:26:17

标签: java android firebase google-cloud-firestore

在Firestore上发现任何更改时,始终获取整个文档。如何获取仅新更新的数据?

这是我的数据

collections

在第一次加载时,我需要按聊天对象中的对象顺序发送msg和sendby(例如:2018_09_17_30_40),如果数据已更新,则仅获取新的msg和sendby 在get()上获取整个文档而没有任何顺序 注意:适用于Android应用的代码。

3 个答案:

答案 0 :(得分:2)

您可以存储上次获取的日期,并且只能获取日期大于上次更新日期的对象。

db.collection('groups')
  .where('participants', 'array-contains', 'user123')
  .where('lastUpdated', '>', lastFetchTimestamp)
  .orderBy('lastUpdated', 'desc')

答案 1 :(得分:0)

  

在火灾存储中发现任何更改时,始终获取整个文档。

新的Cloud Firestore数据库与Firebase实时数据库具有不同的概念,因此请勿混淆。没有字段级权限或对文档的访问。这是整个文档,或者什么也没有。 Cloud Firestore侦听器在文档级别上触发。仅凭文档中的新更新数据就无法触发。

看到您的数据库,我可以说您没有通过在chat属性下添加这些消息来选择正确的模式。

根据official documentation

  

Cloud Firestore经过优化,可以存储大量小文件。

您应该考虑创建一个名为messages的新集合,并将每条消息存储为单独的文档。在上面的链接中,提供了有关如何实现此目标的示例。

答案 2 :(得分:0)

Alex mamo的答案将我引到了另一个解决方案,因为我在数据库中遇到了模型问题,所以我所做的是对键进行排序

 JSONObject jsonChat = jsonObj.getJSONObject("chat");
                                ArrayList list = new ArrayList<>();
                                for (int i = 0; i < jsonChat.names().length(); i++) {
                                    list.add(jsonChat.names().getString(i));
                                }
                                Collections.sort(list);