gpt4 book ai didi

javascript - 查询中的 Firebase StartAfter 未按预期工作

转载 作者:行者123 更新时间:2023-11-29 17:44:23 25 4
gpt4 key购买 nike

我正在使用 firebase firestore 作为我的数据库,并且我编写了 firebase 函数来从 firestore 数据库中检索数据。

我想要实现的是分页,并且根据文档,我已经为我的 firebase 函数实现了代码。下面是代码:

exports.getBillList = functions.https.onRequest((req, res) => {
let docs=[];
let limit = 15;
return cors(req, res, () => {
let lastBillInList=req.query.lastBillInList;
console.log("lastBillInList value: " + lastBillInList);
if (lastBillInList === null || lastBillInList === undefined) lastBillInList = 0;
//var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length - 1];
if(lastBillInList==0){
console.log('first time call: as no lastbillseqq');
db.collection("bills").orderBy('billNo','desc').limit(limit).get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {

docs.push(doc.data());
});
res.status(200).send(docs);
}).catch(function (error) {
console.error("Error getting list: ", error);
res.status(500).send();
});
}else{
console.log('second time call: as no lastbillseqq'+ lastBillInList);
db.collection("bills").orderBy('billNo', 'desc').startAfter(lastBillInList).limit(limit).get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {

docs.push(doc.data());
});
res.status(200).send(docs);
}).catch(function (error) {
console.error("Error getting list: ", error);
res.status(500).send();
});
}
});

});

我在我的 firebase 函数中添加了条件,它检查是否提供了最后一个账单编号。

如果是,则检索最后一个账单之后的所有账单记录,直到设置的限制,否则,如果没有提供最后一个账单编号,则将其视为第一次请求,并检索初始记录直至限制

然而,我面临的问题是,无论执行 else 部分的代码如何,当提供最后一个账单编号时,查询始终返回从结果开始到指定限制的记录。出于某种原因 StartAfter 不工作

例如,我有账单编号为 1 到 25 的记录,我在上面的代码中按降序排列,所以结果是从账单编号 25 到 1。

当没有提供账单号码时,我得到账单号码从 25 到 11 的结果。当我提供帐单编号时,我从帐单编号 25 到 11 得到结果,而不是从 10 到 1 的预期帐单编号。

谁能帮我解决这个问题?

最佳答案

我可以设法通过以下代码进行分页。在我的模型对象中,我使用了文档 ID,基于它我找到了 documentReference -> documentSnapshot。我最终使用 documentSnapshot 进行比较(这是我的错误,因为之前我没有使用 documentSnapshot)以获得所需的输出。

下面是我的代码:

exports.getBillList = functions.https.onRequest((req, res) => {


console.log("----------------------------------function start");

let docs = [];
let lastBillInList=req.query.lastBillInList;
if(lastBillInList===undefined){
lastBillInList="noDocument";
}
let limit = 15;

return cors(req, res, () => {


var lastVisible = db.collection("bills").doc(lastBillInList);


lastVisible.get().then(function (doc) {
if (doc.exists) {
db.collection("bills")
.orderBy("billNo", "desc")
.startAfter(doc)
.limit(limit).get().then(function(querySnapshot){

querySnapshot.forEach(function (doc) {
//console.log(doc.data().billNo + " pushed.." + ": last bill was: " + tempBill);


docs.push(doc.data());
});
return res.status(200).send(docs);

});
} else {
db.collection("bills")
.orderBy("billNo", "desc")
.limit(limit).get().then(function (querySnapshot) {

querySnapshot.forEach(function (doc) {

docs.push(doc.data());
});
return res.status(200).send(docs);

});
}
}).catch(function (error) {
console.log("Error getting document:", error);
return res.status(500).send();
});

console.log("----------------------------------function end");
});
});

关于javascript - 查询中的 Firebase StartAfter 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51180597/

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