某些文件的firestore快照



关于如何使快照只返回特定集合中的文档?

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

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

在我的";位置数据";集合我有按位置命名的文档(例如ca1001、ca1002等(

以及一个user collection > userID > locations数组,用于设置用户可以查看的位置。

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

我将users集合中的locations数组放入var中,并尝试在代码端使用map和其他东西,还尝试了一些通过安全规则等方法。只是运气不太好。

这是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>';
}
};

我最终使用了"数组包含";并为我想要包含的每个文档添加了一个用户字段。其中("_users","array contains",user.email(。只需创建一个简单的管理员来管理用户,就可以避免手动将所有用户添加到每个文档中。谢谢大家的建议。

关于如何获取快照以仅返回集合中的某些文档,有什么建议吗?

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

最新更新