我正在小型测试数据库上运行一个简单的查询,这是我的查询:
_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
行,一切就停止了。
[Firestore在缺少索引时会提供错误消息,并提供用于创建索引的链接。
我面临的问题是错误消息正在Logcat输出上打印,而Flutter我们使用调试控制台,因此错误消息根本没有出现,我认为我的idexe很好。
[我已经向Cloud Firestore Flutter团队提交了一个错误,因此他们至少可以更新入门文档,并指出所有丢失的索引错误都将在Logcat上打印(至少对于Android而言。
PS:由于索引仍在构建中,我仍然没有对查询本身进行测试。我必须指出,即使Firestore控制台说已经构建并准备好了,我仍然收到错误消息,说我必须等到它们完成构建。