【问题标题】:firestore snapshot of certain documents某些文档的firestore快照
【发布时间】:2021-09-27 12:25:31
【问题描述】:

关于如何获取快照以仅返回某些内容的任何建议 集合中的文档?

 db.collection('locations-data').get().then(snapshot => {
      setupLocations(snapshot.docs);

JS setupLocations 函数循环遍历并将数据添加到 UI 上的 ul/li。它可以工作,但它会加载每个文档,我只想要基于用户集合中列出的用户访问权限的特定文档。

在我的“位置数据”集合中,我有按位置命名的文档(例如 ca1001、ca1002 等)

还有一个user collection > userID > locations 数组来设置用户可以查看哪些位置。

如上所述,安装程序在前端工作得很好,但会加载所有文档,我只希望某些用户获得某些位置(文档)以显示在 UI 中。

我将 users 集合中的位置数组放入 var,并尝试在代码方面使用地图和其他东西,还通过安全规则等尝试了一些东西。只是运气不佳。

这是为用户加载显示的 UI 端代码。

// show locations
const setupLocations = (data) => {
  if (data.length) {
    let html = '';
    data.forEach((doc) => {
      const location = doc.data();

      const li = `
      <li>
      <div class="collapsible-header grey lighten-4">
      ${location.shortName}, Total Income: ${location.todayIncome}
      </div>
        <div class="collapsible-body white">${location.totalIncome}</div>
      </li>
    `;
      html += li;
    });
    locationList.innerHTML = html;
  } else {
    locationList.innerHTML = '<h5 class="center-align">Login to view data</h5>';
  }
};

 

【问题讨论】:

  • 您是否尝试过使用“in”查询过滤器?
  • 我做了短暂的,将再次通过该选项。我有大约 20-30 个用户和大约 20 个文档。每个位置都需要不同级别的访问权限。

标签: javascript security google-cloud-firestore firebase-security


【解决方案1】:

我最终使用了“array-contains”,并在我想要包含的每个文档中添加了一个用户字段。 .where('_users', 'array-contains', user.email)。只需创建一个简单的管理员来以这种方式管理用户,以避免必须手动将所有用户添加到每个文档。谢谢大家的建议。

【讨论】:

    【解决方案2】:

    有关如何获取快照以仅返回集合中的某些文档的任何建议?

    由于您的第一个选项是根据用户位置获取所有文档,因此您可以使用@pepe 所说的,where in 查询过滤器来获取集合中的特定或某些文档。另一种选择是将来自user 集合的所有位置数据存储到数组变量中,然后将其直接显示到您的 UI。这样您就不需要查询location-data 集合,因为您已经根据用户的数据获得了所有特定的位置数据。

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 2018-03-19
      • 2019-09-03
      • 1970-01-01
      • 2020-09-26
      • 2021-09-02
      • 2020-12-16
      • 2023-03-19
      • 2019-08-02
      相关资源
      最近更新 更多