Google cloud firestore 如何获取集合中的第一个和最后一个文档?

Google cloud firestore 如何获取集合中的第一个和最后一个文档?,google-cloud-firestore,javascript,firebase,Google Cloud Firestore,Javascript,Firebase,我收集了许多文件。 我想获取集合中的第一个和最后一个文档(按时间戳排序) 我如何查询这个 我不确定您要按哪个时间戳排序,所以我假设您的文档看起来像这样 /id/:{ 时间戳:FirebaseFirestore.timestamp //…任何其他属性 } 您可以通过以下方法查询CollectionReference,从而获得一个 const collectionQuery=firestore .collection('collectionName') .orderBy('timestamp','

我收集了许多文件。
我想获取集合中的第一个和最后一个文档(按时间戳排序)

我如何查询这个

我不确定您要按哪个
时间戳
排序,所以我假设您的
文档
看起来像这样

/id/:{
时间戳:FirebaseFirestore.timestamp
//…任何其他属性
}
您可以通过以下方法查询
CollectionReference
,从而获得一个

const collectionQuery=firestore
.collection('collectionName')
.orderBy('timestamp','asc')
现在,我们希望通过使用该方法获得一个(这将允许我们访问文档)

const collectionSnapshot=await collectionQuery.get()
现在我们只需访问第一个和最后一个文档

const firstDocument=collectionSnapshot.isEmpty
? 无效的
:collectionSnapshot.docs[0]
const lastDocument=collectionSnapshot.isEmpty
? 无效的
:collectionSnapshot.docs[collectionSnapshot.docs.length-1]

瞧,你有你的第一份也是最后一份文件了!:-)

Firestore默认情况下不会对文档进行时间戳排序。您必须为每个文档添加一个时间戳字段,并在查询中使用该字段。您将需要至少两个查询才能仅获取这两个文档。第一个和最后一个-以及下载中间的每个文档。相当昂贵的手术。另一个答案只查询两个文档,并且只产生了两个文档的读取成本。@LeadDreamer实际上我想知道,访问文档或者对两个单独的
orderBy
查询进行两次异步调用,哪一个性能更高,尽管它们有限制,所以我假设它们的性能更高。我很好奇
limit
在内部是否确实对
CollectionReference
做了一些事情,或者只是获取,然后简单地返回第一个
QueryDocument
limit(1)实际上只获取一个文档,因此需要读取一次。它只传输一个文档,因此使用的带宽更少。它只传输一个文档,因此所需时间更少。所有这些都在服务器上。如果出于某种原因,您随后总是需要其余的文档,那么它们将在缓存中,但我看不到不使用.limit()的性能原因