如何在具有多个条件多个where子句的flutter cloud firestore中查询?

问题描述

 widget.filteredRef= FirebaseFirestore.instance
      .collection('users')
      .doc(widget.uid)
      .collection('incomes')
      .where('date',isGreaterThanorEqualTo:            startTimeStamp,isLessthanorEqualTo: endTimeStamp)
      .where('amount',isGreaterThanorEqualTo: amountFrom,isLessthanorEqualTo: amountTo)
      .snapshots();

       

嗨,我是新手。我想指定一个查询,以从特定日期范围和用户数量中检索收入数据,作为颤动云Firestore中的列表。例如,日期从01/01/2020到01/02/2020的金额为0到1000。但是使用两个where子句或两个ord​​erby或一个orderby和一个where子句不起作用。请告诉我流的方式。

这是我的消防局收入文件链接https://drive.google.com/file/d/1lAbF1t641nBK4hRn5zLT-4eNUQ-FyajW/view?usp=sharing

解决方法

您将需要在Firebase控制台本身中创建一个索引。这是因为firebase基本上存储文档的长数组,并且执行类似以下操作:Query = CorrectIndex[start:end],如果不对数据进行排序则无法执行。它为文档的每个项目都创建了这样的索引,但没有任何组合(对于您可能不需要的东西而言,这将是昂贵的)。因此,您需要告诉Firebase它需要为要使用的每个组合创建正确排序的索引,这样在您开始查询时它可以很快。如果我没记错的话,在您的错误消息中,已经提供了指向Firebase控制台的链接。单击该按钮,系统将指导您完成该过程。

但是,这不是完全正确的。您将需要重新制作该索引以使用“ CollectionGroup”。其他一切都可以保持不变。无论如何,关于firebase的一些不错的系列是这样的:https://www.youtube.com/watch?v=Ofux_4c94FI