簡體   English   中英

如何獲取 Firebase 集合中的所有文檔(包括不存在的祖先文檔)?

[英]How do you fetch all documents (including non-existent ancestor documents) in a Firebase collection?

我試圖提取“用戶”集合中的所有文檔,但它只提取“fred”和“lisa”,並忽略所有斜體文檔:

對於此數據:

在此處輸入圖像描述

試圖獲取所有文件:

在此處輸入圖像描述

將產生:

info: length 2
info: fred  =>  { gender: 'male', contacts: [ '' ] }
      lisa  =>  { contacts: [ '' ] }

根據 Firebase 文檔( Firebase:添加和管理數據):

警告:即使不存在的祖先文檔出現在控制台中,它們也不會出現在查詢和快照中。 您必須創建文檔以將其包含在查詢結果中。

注意:當用戶點擊觸發firebase.auth()函數的注冊按鈕時,不存在的祖先用戶似乎是自動創建的( fredlisa是手動創建的)。

如果某些用戶沒有出現在我的查詢中,我將如何打印每個用戶的contacts 我是否需要定期運行手動重新添加所有用戶的腳本,或者是否有更優雅的解決方案?

正如您所提到的,這些“文檔”在 Firebase 控制台中以斜體顯示:這是因為這些文檔僅作為一個或多個子集合的“容器”存在(在控制台中),但它們不是“真正的” ”文件。

事實上,如果您直接在具有完整路徑doc1/subCol1/subDoc1col1集合下創建文檔,則不會創建任何中間文檔(即沒有doc1文檔)。

Firebase 控制台以斜體顯示這種“容器”(或“占位符”),以便“具體化”層次結構並允許您導航到subDoc1文檔,但doc1文檔在 Firestore 數據庫中不存在。

舉個例子:假設col1集合下有一個doc1文檔

col1/doc1/

subCol1 (子)集合下的另一個subDoc1

col1/doc1/subCol1/subDoc1

實際上,從技術的角度來看,它們完全沒有關系。 他們只是共享他們路徑的一部分,除此之外別無其他。 這樣做的一個副作用是,如果您刪除文檔,它的子集合仍然存在

因此,如果您希望能夠查詢這些父文檔,則必須自己創建它們,如評論中提到的 jackz314。

如果您嘗試從 Firebase 身份驗證中列出所有注冊用戶,您可以使用 Firebase SDK 函數:

    function listAllUsers(nextPageToken) {
      admin.auth().listUsers(1000, nextPageToken)
        .then(function(listUsersResult){
          listUsersResult.users.forEach(function(userRecord) {
            console.log('user', userRecord.toJSON());
          })
          if (listUsersResult.pageToken) {
            // list next batch of users
          }
        })
        .catch(function(err) {
          console.log('Error listing users: ', error)
        });
    }

    listAllUsers();

通過http://firebase.google.com/docs/auth/admin/manage-users#list_all_users

暫無
暫無

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

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