Firestore如何将Orderby Desc与Startafter(NULL)相结合



我已经搜索了一段时间,但还没有找到这样的原因。

基本上,这返回集合中的一系列文档。

this.db.collection('people', ref => {
    return ref.orderBy(name, 'asc')
              .startAfter(null)
              .limit(10)
})...

这返回一个空数组。

this.db.collection('people', ref => {
    return ref.orderBy(name, 'desc')
              .startAfter(null)
              .limit(10)
})...

唯一的区别是Orderby设置为" DESC"。有人可以解释为什么会发生这种情况以及解决问题吗?预先感谢!

我相信问题是 startAfter(null)。当您按升序排序时,零文档首先出现,然后是非零文档。有关确切的订单,请参阅有关值类型订购的Firebase文档。

当您按降序排序时,所有的空文档都将持续下去,因此null Docs以返回查询后,没有任何内容。

我建议删除startAfter(null),直到您有一个值。

如果有人对我的解决方案感兴趣,请箭头:

var lastDocumentSnapshot : DocumentSnapshot? = null;
if (url != null){
    val query = this.getLastDocumentSnapshotAsync(url).await()
     if (!query.isEmpty){
        lastDocumentSnapshot = query.documents.distinct().first()
     }
}
val query = firebaseDb.collection("urls")
    .orderBy("name", sortDirection)
    .limit(limit)
if (sortDirection == Query.Direction.ASCENDING)
    query.startAfter(lastDocumentSnapshot)
else
    query.endBefore(lastDocumentSnapshot)
return query.get().asDeferredAsync()

不要介意代码的其他部分。基本上,解决方案是使用endBefore,如果排序降临。

最新更新