我正在将Firestore用于正在从事的电子商务项目。
我的问题是,如果用户将页面放在页面2上,我将如何直接对其进行查询。
现在每页上有48个产品,基本上我需要49至97号文件。
如何?
我得到了整个分页https://firebase.google.com/docs/firestore/query-data/query-cursors
带有startAfter以及所有其他内容,但是,如果该人直接落在Page 2上并且我希望在当前的排序中使用49至97号文档,该怎么做。在文档上放置数字不是一种选择,如果他以侧面的第二个参数color = red&page = 2着陆,会导致什么。另外,我无法使用startAfter,因为我不知道49号之前的文档。
使用Firestore甚至有可能吗?
答案 0 :(得分:0)
由于Firestore SDK无法从特定页面开始查询,因此唯一的方法是:
解决方案编号的样本代码。 1:
//Taken from Firebase code example in the link
Query page = db.collection("cities")
.orderBy("population")
.limit(25);
List<DocumentSnapshot> desiredList;
//Looping through each pages, start from the first one
for (int page = 1; page <= desiredPage; page++) {
page.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
desiredList = documentSnapshots.getDocuments();
//This will be ignored if already the last page
DocumentSnapshot lastPage = desiredList
.get(documentSnapshots.size() -1);
page = db.collection("cities")
.orderBy("population")
.startAfter(lastPage)
.limit(25);
}
});
}
解决方案编号的样品2:
//Taken from Firebase code example in the link
Query allPages = db.collection("cities")
.orderBy("population")
.limit(25 * desiredPage);
//Looping through each pages, start from the first one
allPages.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
//Retrieve only documents from no. something to something
List<DocumentSnapshot> desiredDocuments = documentSnapshots
.getDocuments().subList(25 * (desiredPage - 1), desiredPage * 25);
}
});
(也许会有诸如startAtPage()
之类的功能)
虽然我更喜欢没有解决方案。 2为简单起见,但每个开发人员都有自己的偏好。