簡體   English   中英

如何查詢firebase實時數據庫獲取上月數據

[英]How to query firebase realtime database to get last month data

如何根據快照中的時間戳查詢上個月或過去 2 個月的數據這是問題,知道我已經能夠像這樣在 Firestore 中做到這一點

useEffect(() =>{
  const fetchData = async () => {
  
  const today = new Date()
  const lastMonth = new Date(new Date().setMonth(today.getMonth() - 1))
  const prevMonth = new Date(new Date().setMonth(today.getMonth() - 2))
  
  const lastMonthQuery = query(collection(db,'users'), where('since', '<=', today), where('since', '>', lastMonth))
  
  const lastMonthData = await getDocs(lastMonthQuery)
  
  }
  fetchData()
},[])

我如何在實時數據庫中編寫這樣的查詢? 我已經嘗試過這段代碼,這就是我的數據庫的樣子

在此處輸入圖像描述

useEffect(()=>{
    const fetchData = async () =>{
      const today = new Date()
      const lastMonth = new Date(new Date().setMonth(today.getMonth() - 1))
      const prevMonth = new Date(new Date().setMonth(today.getMonth() - 2))

      try{
        const dbRef = query(ref(database, 'users/since'), startAt(lastMonth), endAt(today));
        const last = await get(dbRef)
        console.log(last)

         }catch(err){
          console.log(err)
        }
      }
      fetchData()
    },[])

在控制台中我得到了這個

錯誤:查詢:按優先級排序時,傳遞給 startAt()、startAfter()、endAt()、endBefore() 或 equalTo() 的第一個參數必須是有效的優先級值(null、數字或字符串)。

此代碼不起作用:

query(ref(database, 'users/since'), startAt(lastMonth), endAt(today));

這會創建對/users/since的引用(在您的屏幕截圖中不存在),然后根據稱為優先級的隱式值過濾它們。

您想要做的是在/users上運行查詢並過濾since上的數據,您可以通過將orderByChild傳遞給查詢來完成:

query(ref(database, 'users'), orderByChild('since'), startAt(lastMonth), endAt(today));

另請參閱有關訂購數據的 Firebase 文檔,在過濾之前您應該始終這樣做。

暫無
暫無

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

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