首页 > 解决方案 > Firestore getDocuments Source.cache 和索引 - 离线查询

问题描述

在我的代码中,我检查我是否没有输入重复的对象,如下所示:

 QuerySnapshot querySnapshot = await myCollection
              .where('x', isEqualTo: x)
              .where('y', isEqualTo: y)
              .where('z', isEqualTo: z)
              .getDocuments(source: Source.cache);
          if (querySnapshot.documents.length == 0) {
           ... add the document to the batch
          }

我发现对数千个文档进行这种额外检查会减慢服务器中的文档添加速度。没有检查,只需几秒钟,但检查,可能需要几分钟。

我在集合中启用了 x、y、z 字段的索引。

问题:当我使用Source.cache进行离线查询时,此索引是否也可以离线工作?

在将记录添加到服务器之前,是否有更好的方法来确定记录是否离线重复?

标签: google-cloud-firestore

解决方案


Firestore 索引在离线时无法正常工作。 SDK 无法像 Firestore 云服务在应用程序在线时执行的那样离线执行大规模可扩展的本地查询。这是一个已知的限制并且没有解决方法,当有更多本地缓存的文档用于集合时,问题会变得更糟。

您可能需要考虑使用其他方法对新文档进行排队,然后等到应用程序上线后再检查它们。


推荐阅读