2017-08-29 105 views
0

enter image description here如何在Firebase查詢中使用startAt()?

讓我們假設上面的firebase數據庫模式。

我想要的是檢索「15039996197」時間戳後的郵件。每個消息對象都有一個createdAt屬性。

如何在特定時間戳之後才能獲取消息?在這種情況下,最後兩條消息是我想要檢索的。

我試過firebaseb.database().ref(`/rooms/$roomKey/messages`).startAt('15039996197')但失敗。它返回0.我該怎麼做?

回答

2

與您的查詢的情況是,它期望message節點應該有一個數字值開始,在這種情況下,你想要一個名爲createdAt的子節點。因此,在這種情況下,你必須指定您希望通過createdAt訂購,因此你需要做的這個

firebase.database().ref(`/rooms/$roomKey/messages`).orderByChild('createdAt').startAt('15039996197').on(//code); 

這樣它會返回內部message具有一個名爲createdAt的它開始於15039996197孩子的所有節點。訂購你的查詢可能會對性能有點不好,因爲我喜歡看看.indexOn規則。

欲瞭解更多信息,請看看here

希望這會有所幫助。

+0

JSON顯示時間戳存儲爲一個數字,所以'.startAt(15039996197)'。 –

+0

@FrankvanPuffelen嗨。我能問你一件事嗎?你知道哪個數據模式是正確的嗎? '1。使用時間戳作爲Rishabh的回答'vs vs 2'的關鍵字。使用我以前的數據模式和查詢與.orderByChild和.startAt' – Juntae

+0

我想使用時間戳作爲關鍵,但查詢失敗。 'fb.database()。ref(/ rooms/$ roomKey/messages).startAt(timestam p)' – Juntae

1

Firebase Data Retrieval逐節點地工作。 因此,無論您想要獲取什麼數據,整個節點都會被遍歷。 所以在你的情況下得到任何消息,你的複雜性將是O(消息的數量)。

你會想重構你存儲數據的方式,並把createdAt放在Node而不是Child中。

+1

作爲您的推薦,我使用時間戳作爲關鍵。但'fb.database()。ref('/ rooms/$ roomKey/messages').startAt(timestamp)''不起作用。任何想法 ?? – Juntae

相關問題