[英]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()
函數的注冊按鈕時,不存在的祖先用戶似乎是自動創建的( fred
和lisa
是手動創建的)。
如果某些用戶沒有出現在我的查詢中,我將如何打印每個用戶的contacts
? 我是否需要定期運行手動重新添加所有用戶的腳本,或者是否有更優雅的解決方案?
正如您所提到的,這些“文檔”在 Firebase 控制台中以斜體顯示:這是因為這些文檔僅作為一個或多個子集合的“容器”存在(在控制台中),但它們不是“真正的” ”文件。
事實上,如果您直接在具有完整路徑doc1/subCol1/subDoc1
的col1
集合下創建文檔,則不會創建任何中間文檔(即沒有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.