我正在尝试提取“用户”集合中的所有文档,但是只提取“ fred”和“ lisa”,而忽略所有斜体的文档:
对于此数据:
尝试获取所有文档:
将产生产量:
info: length 2
info: fred => { gender: 'male', contacts: [ '' ] }
lisa => { contacts: [ '' ] }
根据Firebase文档(Firebase: Add and Manage Data):
警告:即使不存在的祖先文档出现在控制台中,它们也不会出现在查询和快照中。您必须创建文档以将其包含在查询结果中。
注意:当用户单击触发firebase.auth()
功能的注册按钮(fred
和lisa
是手动创建的)时,似乎不存在的祖先用户会自动创建)。
如果某些用户未出现在我的查询中,我该如何打印每个用户的contacts
?我是否需要定期运行一个手动重新添加所有用户的脚本,还是有一个更优雅的解决方案?
答案 0 :(得分:1)
正如您所提到的,这些“文档”在Firebase控制台中以斜体显示:这是因为这些文档仅作为一个或多个子集合的“容器”(在控制台中)存在。不是“正版”文件。
事实上,如果您直接在col1
集合下创建具有完整路径doc1/subCol1/subDoc1
的文档,则不会创建任何中间文档(即没有doc1
文档)。 / p>
Firebase控制台以斜体显示这种“容器”(或“占位符”),以便“具体化”层次结构并允许您导航到subDoc1
文档,而doc1
文档却没有在Firestore数据库中不存在。
让我们举个例子:想象一个doc1
集合下的col1
文档
col1/doc1/
和subDoc1
(子)集合下的另一个subCol1
col1/doc1/subCol1/subDoc1
实际上,从技术角度来看,它们根本不相关。他们只是分享自己的道路的一部分,但没有别的。这样做的副作用是如果您删除文档,则其子集合仍然存在。
因此,如果您希望能够查询这些父文档,则必须自己创建它们,如评论中提到的jackz314。
答案 1 :(得分:0)
如果您要尝试通过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