根据ID或属性迭代Firestore Android集合

时间:2018-08-29 04:40:16

标签: java android firebase pagination google-cloud-firestore

  

我要迭代从集合文档ID开始的集合。

是否有下面的方法可以让我们读取以id或属性id开头的数据?

 db.collection("questions").startReadingDocumentAt("02cubnmO1wqyz6yKg571 ").limit(10).get() 

db.collection("questions").startReadingWhereEqualTo("questionID","02cubnmO1wqyz6yKg571 ").limit(10).get()

我知道我可以根据ID读取DocumentSnapShot ,然后可以开始使用lastVisible项进行迭代。但是花了我两次读操作。可以一次完成吗?

Firestore-root
    |
    --- questions (collections)
    |     |
    |     --- 02cubnmO1wqyz6yKg571 (questionId document) // myID and my questionID is same
    |            |
    |            --- questionId: "02cubnmO1wqyz6yKg571"
    |            |
    |            --- title: "Question Title"
    |            |
    |            --- date: August 27, 2018 at 6:16:58 PM UTC+3
    |            |

我已经走过through this

说明

我不想做RecyclerView pagination。我想在每次活动开始时加载下一个10个问题。因此,我以相同的方式调用查询,但需要保存 DocumentSnapShot 。所以我决定保存问题ID并在此基础上读取数据...

2 个答案:

答案 0 :(得分:1)

没有:

startReadingDocumentAt("02cubnmO1wqyz6yKg571")

startReadingWhereEqualTo("questionID","02cubnmO1wqyz6yKg571")

在firestore中,但根据您的数据库架构,要解决此问题,可以使用以下查询:

db.collection("questions").
    whereGreaterThanOrEqualTo("questionID","02cubnmO1wqyz6yKg571")
    .limit(10)
    .get()
    addOnCompleteListener.(/* ... */)

更多信息here

  

使用附加的过滤器创建并返回一个新的查询,该过滤器中的文档必须包含指定的字段,并且该值应大于或等于指定的值。

答案 1 :(得分:1)

您可以使用query cursors进行此操作。例如:

db.collection("questions")
    .orderBy("questionID")
    .startAt("02cubnmO1wqyz6yKg571")
    .limit(10)
    .get()