我正在按标题排序时尝试使用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(),但是它会抛出错误
答案 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
个结果。