簡體   English   中英

從文檔 Firebase 中獲取所有 collections

[英]Get all collections from a document Firebase

我正在使用 firebase 構建一個全棧待辦事項應用程序來存儲用戶信息。 我的想法是每個用戶可以創建多個列表並在每個列表中寫入多個“待辦事項”(例如,今天有一個列表,明天有另一個列表)。 我的數據結構如下:

火庫查詢問題

users(集合) -> usersID(每個用戶都是一個文檔) -> todos 列表(集合) -> todoId(文檔) ->(帶有數據的對象)

我似乎無法查詢用戶可能擁有的多個列表(默認情況下,我目前只是從“待辦事項”集合中檢索數據)。 要么我沒有看到一些 Firestore 功能,要么我沒有正確構建我的數據庫。 有什么建議嗎?

您正在很好地構建數據。 問題是Firebase Client SDK不提供 function 來檢索文檔具有的所有子集合。 為了解決您的問題,您有多種選擇。

1.最干凈但最詳盡的方式

您升級到Blaze 計划並將 Firebase 函數與管理員 SDK 一起使用。 管理員 SDK 提供了一個名為listCollections()的 function,它完全可以滿足您的需求。 缺點是 Firebase 函數有一個叫做coldstart啟動的東西,這意味着當你的 function 空閑幾分鍾時,它需要長達 20 秒(根據我的經驗)在你調用它后再次運行,這真的很令人沮喪。 否則,您可以在 Heroku 之類的東西上運行免費的 node.js 服務器來使用管理員 SDK 以避免冷啟動(我認為更好的選擇)。 Admin SDK 明確不打算在客戶端使用。 檢查這個線程

2.列出你所有的待辦事項(最簡單的方法)

每次用戶創建一個新列表時,您都將其添加到用戶文檔中的數組中,如下所示:

// Representation of your user document
user
    name: "Florian"
    lists: [
        "todos",
        "anotherList"
    ]

因此,通過這種方式,您可以獲取您的用戶,從中獲取列表屬性,並在lists數組上循環調用所有列表。 作為替代方案,只需顯示lists內容並讓用戶顯式打開它以保存讀取。

3. 重構你的數據庫(我會推薦它)

如果您還沒有大量數據,我建議您重組數據庫,例如:

users - the collection with all your users (without the todo list subcollections

lists - containing a document for every created list
      - each document contains a field with `owner`
      - each document contains a field with the list name
      - each document owns a subcollection with todos

如果您使用這種方式,您可以像這樣查詢數據庫

const getLists = async () => {
    const ref = collection(db, 'lists');
    const q = query(ref, where('owner', '==', theUserYouWantToQuery);
    // returns array with all list (including listname) of that user.
    const lists = (await getDocs(q)).docs.map(doc => ({ ...doc.data(), doc.id }));
}

當您擁有該用戶的所有列表對象時,您可以遍歷該數組以獲取列表中的所有待辦事項,或者讓用戶通過打開它只獲取一個列表

暫無
暫無

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

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