2016-07-28 59 views
2

我有一個有日期的數據列表。我通常查詢按日期排序的數據。但是當我需要從中間鍵來回取回某些數據時,我處於這種情況。我有這樣的日期(orderByChild("date"))排序的數據:Firebase從中間鍵向上和向下查詢數據

{ 
    "key1":{ 
     "date": "2016-07-25" 
    }, 
    "key2":{ 
     "date": "2016-07-26" 
    }, 
    "key3":{ 
     "date": "2016-07-27" 
    }, 
    "key4":{ 
     "date": "2016-07-28" 
    }, 
    "key5":{ 
     "date": "2016-07-29" 
    } 
} 

注:日期可以在未來也。每個日期可以有多個條目。兩個日期之間可能有差距。

如果我知道key3,我怎樣才能檢索一個以上key3(即key2)數據結束列表(即key5)的?

因此,例如,

  • 與KEY3 - > KEY2到KEY5(直到結束)。
  • with key4 - > key3 to key5(until end)。

如何使用密鑰查詢密碼,並按子女排序「date」。我有一個key2。從這我需要獲取列表。

我試圖在部分中獲取結果,一個用於上部,另一個用於較低。但是,當我使用orderByChild("date")時,我不能使用帶鍵的endAt()(Docs說:您可以結合startAt()endAt()方法將結果限制在指定範圍)。

有什麼辦法可以檢索基於關鍵的列表?在一個去或部分?

+0

這是不可能的在任何語言甚至java也不允許你 firebase是不支持這個。 您可以手動使用for循環查找key3 –

+0

可能有成千上萬條記錄,因此按鍵查找對性能不利。但有什麼辦法我可以查詢它的兩部分。 1以上的key3和全部以下的key3。那也可以。 – kirtan403

+0

沒有firebase是使用二進制搜索樹算法,所以你沒有必要擔心firebase性能 –

回答

0

我改變了鍵的定義方式。

代替push(),我用date和push()的組合來設置密鑰。

比如,新密鑰的格式如下YYYYMMDD<PUSH_KEY>。採用這種格式,我可以用2個不同的查詢查詢數據。

一個用鑰匙結尾:

ref.orderByKey().endAt(key).limitToLast(1) 

和一個開始鍵:

ref.orderByKey().startAt(key) 

這讓我從兩個從中間鍵兩端的結果。

謝謝@puf和大家的意見和幫助。

+0

@ Kirten403 ...我也堆積在同樣的問題..我的要求是什麼..我想一次只檢索10條記錄,並通過拉刷新剩餘的10條記錄,我想直到我達到在Firebase數據的末尾...您能否幫助或提出您的建議 –

+0

@RavindraKushwaha因此,您可能需要根據您的要求在回收站適配器或列表視圖中實現您自己的登錄。當用戶拉動時,通過維護開始鍵並將查詢限制爲10條記錄來進行查詢以檢索記錄。每次將結果追加到原始結果列表中。希望你得到了我想說的一點.. – kirtan403

+0

@ Kirten403 ....但現在我已登錄,並獲得第一次,在10的限制..現在我想檢索10更多的記錄載入更多...你可以PLZ幫助我...我已經創建了啓動,限制和其他Firebase的方法的邏輯,但沒有得到預期的結果.. –

相關問題