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
来实现的。这就是你的答案。