Firestore离线删除文档

时间:2019-12-30 19:00:39

标签: ios firebase google-cloud-firestore

我的iOS应用商店的Firestore数据库具有以下文档和集合结构:

-ActiveSession (Application allows user to have only one active session in the collection):
--Session
-ArchivedSessions (collection that contains archived (closed) sessions):
--Session 1
--Session 2
--...
--Session N

在关闭会话时,应用程序设置CloseTime参数,将文档复制到ArhivedSessions集合中,并从ActiveSession集合中删除原始文档。

我实现了这种结构,以避免性能方面的潜在问题-从集合中仅获取一个文档总是比在大量文档的集合中查找CloseTime为空的文档总是容易的。

当我的应用程序在线时-所描述的逻辑可以正常工作。但是,当我尝试在离线模式下执行相同操作时(在我的代码中已明确启用该功能),它将无法正常工作。

预期结果: 在脱机模式下,应用程序将活动会话文档移至存档(复制和删除)。从ActiveSessions集合中删除后,它变得不可用且仅在ArchivedSessions集合中可访问。用户界面正在分别更新,应用程序允许用户添加另一个新的活动会话。 启用在线模式后-所有更改都将推送到Firestore Cloud,并以递增顺序获取所有文档:旧会话在ArchivedSessions中关闭,新的活动会话-在ActiveSession中关闭。

实际结果: 在脱机模式下,应用程序“移动”活动的会话文档(实际上我不知道如何检查)。但是实际上它仍然在ActiveSession集合中可用,因此UI无法显示更改,因此不能允许用户添加新会话(因为旧会话显示为活动会话)。

请注意,我使用addSnapshotListener从Cloud获取数据并观察更新。 我检查了StackOverflow,Firebase文档,但没有发现有关在脱机模式下在本地缓存中删除文档的任何信息。我发现的唯一发现是,在github上的某个地方提到了addSnapshotListeners的回调仅在同步完成时才被调用(仅在联机模式下才有效)。

0 个答案:

没有答案