gpt4 book ai didi

java - 如何在我的场景中解决 firestore 基本查询

转载 作者:行者123 更新时间:2023-12-02 02:07:06 26 4
gpt4 key购买 nike

我有一个文档列表,其结构如下所示。

Posts ->
->uuid_1
-> approvedCount : 5
-> postMsg : "Hello world 1"
-> Timestamp : 1234567890
-> userId : "user1"
->uuid_2
-> approvedCount : 6
-> postMsg : "Hello world 2"
-> Timestamp : 1234567891
-> userId : "user2"

firestore 中可能有数千个帖子,而且大小还在不断增加。

condition -> approvedCount 在查询中过滤时必须大于 5。

现在我想每天按时间戳升序获取 20 条记录。我不想重复,所以假设今天我按升序获取了前 20 条记录,明天我想获取接下来的 20 条记录,依此类推。

我尝试过类似的方法

FirebaseUtil.getFireStoreDB("Posts").whereGreaterThan("approvedCount", 5)
.limit(20)
.orderBy("Timestamp", Query.Direction.ASCENDING)
.get()

但不知道我每天将如何获取下一篇文章。因为从文档中我知道你不能使用 < 或 > 查询 2 个字段,否则使用时间戳和 ApprovedCount 会更容易

最佳答案

要解决这个问题,您需要使用 Paginate Data with Query Cursors其中您会发现一个名为 startAfter() 的非常有用的方法,您可以在其中将 documentSnapshots 对象中的最后一个可见元素作为参数传递。正如官方文档中所示,您应该使用以下代码:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
// Construct query for first 20
Query first = rootRef.whereGreaterThan("approvedCount", 5)
.orderBy("Timestamp", Query.Direction.ASCENDING)
.limit(20);

first.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
// Get the last visible document
DocumentSnapshot lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);

// Construct a new query starting at this document, to get the next 20 records
Query next = rootRef.whereGreaterThan("approvedCount", 5)
.orderBy("Timestamp", Query.Direction.ASCENDING)
.startAfter(lastVisible)
.limit(20);

// Do what you need to do with your query
}
});

关于java - 如何在我的场景中解决 firestore 基本查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com