Javascript Firestore如何将orderBy desc与startAfter组合(空)

Javascript Firestore如何将orderBy desc与startAfter组合(空),javascript,firebase,google-cloud-firestore,angularfire2,Javascript,Firebase,Google Cloud Firestore,Angularfire2,我已经找了一段时间了,但还没有找到为什么会这样的原因 基本上,这将返回集合中的文档数组 this.db.collection('people', ref => { return ref.orderBy(name, 'asc') .startAfter(null) .limit(10) })... 这将返回一个空数组 this.db.collection('people', ref => { return ref

我已经找了一段时间了,但还没有找到为什么会这样的原因

基本上,这将返回集合中的文档数组

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)
。按升序排序时,空文档排在第一位,非空文档排在第二位。有关确切顺序,请参阅

按降序排序时,所有空文档都排在最后,因此空文档之后没有任何内容可供查询返回


我建议删除
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

如果我在快照更改触发两次后删除start,由于某种原因。不知道为什么写操作后会触发两次?本地写入触发两次,一次在本地,然后在写入提交到数据库时再次触发。查看上的文档。不写只读。当我对集合应用where查询时,SnapshotChanges会触发两次。看起来它首先发出一些缓存值,然后从服务器发出完整的响应。希望这个答案有帮助。关于快照更改,您还有其他问题吗?如果是这样的话,请发布另一个问题,并附上一个显示行为的片段。嘿,我不理解你的代码。这对我来说没有什么意义。但是,
endBefore
技巧还是按降序进行的。谢谢。在我看来,你的代码并不能直接回答问题。对于那些不熟悉这门学科的人来说,他们会感到困惑。我的解决方案是通过使用
endBefore
而不是像您建议的那样使用
startaafter
来实现的。这就是你的答案。