讓我們假設上面的firebase數據庫模式。
我想要的是檢索「15039996197」時間戳後的郵件。每個消息對象都有一個createdAt
屬性。
如何在特定時間戳之後才能獲取消息?在這種情況下,最後兩條消息是我想要檢索的。
我試過firebaseb.database().ref(`/rooms/$roomKey/messages`).startAt('15039996197')
但失敗。它返回0.我該怎麼做?
讓我們假設上面的firebase數據庫模式。
我想要的是檢索「15039996197」時間戳後的郵件。每個消息對象都有一個createdAt
屬性。
如何在特定時間戳之後才能獲取消息?在這種情況下,最後兩條消息是我想要檢索的。
我試過firebaseb.database().ref(`/rooms/$roomKey/messages`).startAt('15039996197')
但失敗。它返回0.我該怎麼做?
與您的查詢的情況是,它期望message
節點應該有一個數字值開始,在這種情況下,你想要一個名爲createdAt
的子節點。因此,在這種情況下,你必須指定您希望通過createdAt
訂購,因此你需要做的這個
firebase.database().ref(`/rooms/$roomKey/messages`).orderByChild('createdAt').startAt('15039996197').on(//code);
這樣它會返回內部message
具有一個名爲createdAt
的它開始於15039996197
孩子的所有節點。訂購你的查詢可能會對性能有點不好,因爲我喜歡看看.indexOn規則。
欲瞭解更多信息,請看看here。
希望這會有所幫助。
Firebase Data Retrieval逐節點地工作。 因此,無論您想要獲取什麼數據,整個節點都會被遍歷。 所以在你的情況下得到任何消息,你的複雜性將是O(消息的數量)。
你會想重構你存儲數據的方式,並把createdAt放在Node而不是Child中。
作爲您的推薦,我使用時間戳作爲關鍵。但'fb.database()。ref('/ rooms/$ roomKey/messages').startAt(timestamp)''不起作用。任何想法 ?? – Juntae
JSON顯示時間戳存儲爲一個數字,所以'.startAt(15039996197)'。 –
@FrankvanPuffelen嗨。我能問你一件事嗎?你知道哪個數據模式是正確的嗎? '1。使用時間戳作爲Rishabh的回答'vs vs 2'的關鍵字。使用我以前的數據模式和查詢與.orderByChild和.startAt' – Juntae
我想使用時間戳作爲關鍵,但查詢失敗。 'fb.database()。ref(/ rooms/$ roomKey/messages).startAt(timestam p)' – Juntae