我正在一个小型测试数据库上运行一个简单的查询,这是我的查询:
_firestore.collection('chats')
.where('users', arrayContains: userId)
.orderBy('sentDate', descending: true)
.snapshots();
我的数据库位于Cloud Firestore的southamerica-east1处,它看起来像这样(出于安全原因而模糊了一些数据):
我正在使用Android上的Flutter的Firestore插件,因此下划线平台将是Android。
如果删除.where('users', arrayContains: userId)
,查询将立即运行,并且如果更改数据库上的任何字段(例如,如果我使用Firestore控制台并将Chat 1
更改为Chat 2
),则更新立即出现。但是使用where
子句,更新大约需要42秒才能显示。
数据库很小,没有超过15个项目。
这是正常行为吗?如果没有,我该如何解决?
我没有在此查询之上运行任何代码,我只是使用简单的DTO和非常快的UI代码来获取并显示其结果,如果删除了where
子句,我将得到全部15即时显示的文档。我的等待时间很好,我拥有强大的Internet连接,一切都非常快,直到我只添加了这条简单的where
行,一切都停止了工作。
答案 0 :(得分:1)
当缺少索引时,Firestore会提供错误消息,并提供用于创建索引的链接。
我面临的问题是错误消息正在Logcat输出上打印,而Flutter却使用了调试控制台,因此错误消息根本没有出现,我认为我的idexe很好。
我已经向Cloud Firestore Flutter团队提交了一个错误,因此他们至少可以更新“入门”文档,并指出所有丢失的索引错误都将打印在Logcat上(至少对于Android)。
PS:由于索引仍在构建中,因此我仍然没有测试查询本身。我必须指出,即使Firestore控制台说已经构建好并准备好了,我仍然收到错误消息,说我必须等到它们完成构建。