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

问题描述 投票:0回答:2

我试图将集合'users'中的所有文件拉出来,但它只会拉出'fred'和'lisa',并忽略所有斜体文档:

对于这些数据:

enter image description here

试图获取所有文件:

enter image description here

将产量:

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

根据Firebase文档(Firebase: Add and Manage Data):

警告:即使控制台中出现不存在的祖先文档,它们也不会出现在查询和快照中。您必须创建文档以将其包含在查询结果中。

注意:当用户点击触发firebase.auth()函数的注册按钮(手动创建fredlisa)时,似乎会自动创建不存在的祖先用户。

如果某些用户没有出现在我的查询中,我将如何打印每个用户的contacts?我是否需要定期运行手动重新添加所有用户的脚本,还是需要更优雅的解决方案?

database firebase google-cloud-firestore
2个回答
1
投票

如您所述,这些“文档”在Firebase控制台中以斜体字体显示:这是因为这些文档仅作为一个或多个子集合的“容器”存在(在控制台中)但它们不是“真正的” “文件。

事实上,如果您使用完整路径col1直接在doc1/subCol1/subDoc1集合下创建文档,则不会创建任何中间文档(即没有doc1文档)。

Firebase控制台以斜体显示此类“容器”(或“占位符”),以便“实现”层次结构并允许您导航到subDoc1文档,但Firestore数据库中不存在doc1文档。

让我们举个例子:想象一下doc1系列下的col1文档

col1/doc1/

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

col1/doc1/subCol1/subDoc1

实际上,从技术角度来看,它们完全没有关系。他们只是分享他们的一部分路径,但没有别的。这样做的一个副作用是,如果删除文档,其子集合仍然存在。

因此,如果您希望能够查询这些父文档,则必须自己创建它们,如注释中提到的jackz314。


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

© www.soinside.com 2019 - 2024. All rights reserved.