firebase - 颤动的Firestore查询索引不起作用
问题描述
我正在使用flutter和firebase firestore,目前正在开发一个功能。从文档中我需要创建一个索引以使我的功能正常工作,但它实际上不起作用。
我的功能:
getList(String category, ProviderNotifier providerNotifier) async {
List<Data> _myList = [];
DateTime _now = DateTime.now();
DateTime _start = DateTime(_now.year, _now.month-1, 1, 0, 0);
QuerySnapshot snapshot = await db
.collection('data')
.where('category', isEqualTo: category)
.where('dateWhenProofed', isGreaterThanOrEqualTo: _start)
.orderBy('likes', descending: true)
.limit(3)
.get();
snapshot.docs.forEach((document) {
Data data = Data.fromJson(document.data());
_myList.add(data);
});
providerNotifier.myList = _myList;
}
我做了两个索引,一个有赞,一个没有赞。 如果我在我的查询中删除 orderBy likes,它工作得很好。我不明白。
解决方案
您的查询正在生成错误。我建议花时间查找并阅读该错误,因为它会告诉您出了什么问题。
Firestore 不允许您主要对除您在范围过滤器中使用的字段之外的字段进行排序。您的范围过滤器位于“dateWhenProofed”上,因此您必须先按该字段排序。
我建议查看有关订购数据限制的文档:
如果您包含具有范围比较(<、<=、>、>=)的过滤器,则您的第一个排序必须在同一字段上。
推荐阅读
- c++ - 编译器(Visual C++)如何优化按索引访问向量元素?
- reactjs - 如何在反应原生的两个视图之间创建一个重叠的圆形图像?
- r - 是否可以在 Visual Code Studio 中打开绘图查看器?
- spring-boot - Spring Cloud Gateway 功能区重试问题
- javascript - 我的正弦波代码的相位控制有什么问题?
- java - 调用 AWS Lambda Java 函数的 AWS 网关收到空正文
- xamarin - 如何从带有参数的 xamarin 表单中的子视图调用父视图中的方法
- asp.net - ora-28040 没有从 Oracle 客户端 12C 到 Oracle 数据库 19c 的匹配身份验证协议
- rabbitmq - 直接发布到队列时 RabbitMQ DLX 不起作用
- javascript - 对布局更改做出本机反应(监听视图位置)