簡體   English   中英

我剛開始使用 firebase 並在獲取數據時遇到 orderBy desc function 問題

[英]I just started with firebase and have problem with orderBy desc function when getting data

在function orderBy中傳“desc”參數時不返回數據,但傳“asc”或空白時有數據。

const getListProduct = async () => {
    const products = await fs
      .collection("products")
      .orderBy("createAt", "desc") //problem is here.It just works orderBy("createAt", "asc") or orderBy("createAt")
      .startAfter(0)
      .limit(5)
      .get();
    let listProduct = [];

    for (let snap of products.docs) {
      let data = snap.data();
      data.ID = snap.id;
      listProduct.push({ id: snap.id, ...data });
      if (products.docs.length === listProduct.length) {
        
        setListData(listProduct);
      }
    }
  };
     

startAfter()中的值必須是DocumentSnapshot或要在之后開始此查詢的字段的值。 如果createAt字段是時間戳,那么它必須是startAfter(<DATE_OBJ>)或上次查詢的文檔快照,但您傳遞的是一個數字。 嘗試重構代碼,如下所示:

const products = await fs
  .collection("products")
  .orderBy("createAt", "desc")
  .startAfter(new Date(2022, 8, 17, 6, 54, 0)) // for testing Date(year, date, month, hh, mm, ss)
  .limit(5)
  .get();

這應該按降序返回startAfter小於提供的時間戳的所有產品。


或者,您可以將最后一個查詢的快照存儲在 state 中並使用它,如下所示:
 let lastSnapshot = null; const q = fs.collection("products").orderBy("createAt", "desc") if (lastSnapshot) { // Query has been executed before, use last snapshot q.startAfter(lastSnapshot); } const products = await q.limit(5).get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM