首页 > 解决方案 > 颤动的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,它工作得很好。我不明白。

在此处输入图像描述

标签: firebasefluttergoogle-cloud-firestore

解决方案


您的查询正在生成错误。我建议花时间查找并阅读该错误,因为它会告诉您出了什么问题。

Firestore 不允许您主要对除您在范围过滤器中使用的字段之外的字段进行排序。您的范围过滤器位于“dateWhenProofed”上,因此您必须先按该字段排序。

我建议查看有关订购数据限制的文档

如果您包含具有范围比较(<、<=、>、>=)的过滤器,则您的第一个排序必须在同一字段上。


推荐阅读