是否可以使用具有离线持久性的快照侦听器仅读取自应用程序首次打开以来不同的文档? 例如,我在打开第一个应用程序时从/ recipes /集合中读取了所有食谱,并缓存了这些食谱。然后,当用户再次使用快照侦听器打开应用程序时,我检查服务器中的集合是否保持不变。如果我的数据库中有任何写入/删除/更新,它将更新我的缓存配方,但是如果没有,我将不会再次读取数据库。
我需要我的应用程序可以脱机工作,但需要时保持更新,而每次打开时都不会读取数千次。
感谢您的时间。
答案 0 :(得分:2)
为此,Firestore没有内置任何内容。原因很简单:要确定文档是否被修改,必须在服务器上读取该文档。
最简单的添加方法是在文档本身中包含有关文档何时被修改的信息,然后仅查询自客户端上次连接以来已被修改的文档。
所以是
last_modified
。确保每个写操作都包括该字段,并将其设置为服务器的时间戳。
Map<String,Object> updates = new HashMap<>();
updates.put("last_modified", FieldValue.serverTimestamp());
docRef.update(updates)
使用服务器端安全规则来验证此字段始终处于设置和正确状态。
allow write: if request.resource.data.last_modified == request.time;
在客户端上,仅查询自应用程序上次运行/读取数据以来已修改的文档。
last_read
时间戳存储在应用/设备的本地存储中。