当按字符串值排序时,Flutter Firestore startAt()endtAt()无法正常工作

时间:2019-01-22 03:20:19

标签: dart flutter google-cloud-firestore

我正在按标题排序时尝试使用startAt([1])和endAt([3]),但它不起作用。

CVPixelBuffer

当我按等级依次尝试startAt([1])和endAt([3])时,它会起作用。

QuerySnapshot snapshot = await Firestore.instance.collection('items')
  .orderBy("title", descending: false).startAt([1]).endAt([2]).limit(2).getDocuments();

当我不使用endAt()时工作

为什么我按标题订购时不起作用?

QuerySnapshot snapshot5 = await Firestore.instance.collection('items')
  .orderBy("rank", descending: false).startAt([1]).endAt([2]).limit(2).getDocuments();

有人知道吗?

我尝试过的方法: 1.确保软件包是最新的 2.在Firestore上创建索引

[此操作无效] QuerySnapshot快照=等待Firestore.instance.collection('items')。orderBy(“ title”,降序:false).startAt([1])。endAt([2])。limit(2).getDocuments(); < / p>

QuerySnapshot snapshot = await Firestore.instance.collection('items')
  .orderBy("title", descending: false).startAt([1]).limit(2).getDocuments();

我期望过滤时能够使用endAt(),但是它会抛出错误

1 个答案:

答案 0 :(得分:2)

我将假设您的rank字段是数字,而您的title字段是字符串。在这种情况下,这是预期的行为。

Firestore查询按而不是偏移量进行过滤。所以当你:

.orderBy("rank", descending: false).startAt(1).endAt(2)

按文档的等级对文档进行排序,然后返回1到2(含)之间的文档。

当您这样做:

.orderBy("title", descending: false).startAt(1).endAt(2)

文档按其标题排序,然后返回标题在1到2之间的文档。但是,由于标题是字符串而不是数字,所以这意味着没有文档符合条件,并且不会返回任何内容。

Firestore不具有偏移量查询的概念,您可以在其中告诉它跳过前n个结果。