我试图将集合'users'中的所有文件拉出来,但它只会拉出'fred'和'lisa',并忽略所有斜体文档:
对于这些数据:
试图获取所有文件:
将产量:
info: length 2
info: fred => { gender: 'male', contacts: [ '' ] }
lisa => { contacts: [ '' ] }
根据Firebase文档(Firebase: Add and Manage Data):
警告:即使控制台中出现不存在的祖先文档,它们也不会出现在查询和快照中。您必须创建文档以将其包含在查询结果中。
注意:当用户点击触发firebase.auth()
函数的注册按钮(手动创建fred
和lisa
)时,似乎会自动创建不存在的祖先用户。
如果某些用户没有出现在我的查询中,我将如何打印每个用户的contacts
?我是否需要定期运行手动重新添加所有用户的脚本,还是需要更优雅的解决方案?
如您所述,这些“文档”在Firebase控制台中以斜体字体显示:这是因为这些文档仅作为一个或多个子集合的“容器”存在(在控制台中)但它们不是“真正的” “文件。
事实上,如果您使用完整路径col1
直接在doc1/subCol1/subDoc1
集合下创建文档,则不会创建任何中间文档(即没有doc1
文档)。
Firebase控制台以斜体显示此类“容器”(或“占位符”),以便“实现”层次结构并允许您导航到subDoc1
文档,但Firestore数据库中不存在doc1
文档。
让我们举个例子:想象一下doc1
系列下的col1
文档
col1/doc1/
和subDoc1
(子)集合下的另一个subCol1
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