【问题标题】:Firestore return all documents in collection at the rootFirestore 返回根目录中的所有文档
【发布时间】:2022-11-30 21:59:10
【问题描述】:

在我的 firestore 数据库的根目录下,我有一个“用户”和“帐户”集合。 每当我尝试返回这些集合中的任何一个中的所有文档时,我都会收到错误消息(那里肯定有数据):

未捕获(承诺)FirebaseError:空值错误。对于“列表”@ L59,空值错误。对于“列表”@ L63,空值错误。对于“列表”@ L76

产生上述错误的代码:

const query = fs.query(
     fs.collection(firestore, 'accounts'),
  );

  const querySnapshot = await getDocs(query);

  querySnapshot.forEach((doc) => {
     console.log(doc.id, ' => ', doc.data());
  });

如果我尝试从任何子集合中返回所有文档,它工作正常:

const query = fs.query(
     fs.collection(firestore, `accounts/${accountId}`, 'sites'),
  );

  const querySnapshot = await getDocs(query);

  querySnapshot.forEach((doc) => {
     console.log(doc.id, ' => ', doc.data());
  });

任何想法为什么会这样,我查询错了吗?这可能与 firestore 规则有关吗?

塔。

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    如果其他人遇到此问题,我已经找到了原因。

    我只是禁用了 firestore.rules 中的所有规则(由其他人创建)并添加了一个通用规则以在经过身份验证后访问所有文档:

    match /{document=**} {
      allow read, write: if request.auth != null;
    }
    

    然后这停止了错误并列出了所有文档。

    【讨论】:

    • 安全规则永远不会像您显示的那样导致 javascript 错误。安全规则最糟糕的情况是查询将被拒绝,并导致对getDocs 的调用出错,提示“缺少或权限不足”。这是唯一可能因安全规则配置而发生的错误。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多