如何使用基于动态密钥的Firestore查询为Firebase数据编制索引?

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

我正在尝试在其中有两个array-contains的地方添加一个查询,由于Firebase不支持它,因此结果无法正常工作。

const initialQuery = Firebase.firestore.collection('class')
    .orderBy('createdAt', 'desc')
    .where('access.readAccess.classrooms', 'array-contains', id)
    .where('keywords', 'array-contains', keyword)
    .limit(5);

所以我最终写了类似下面的内容。

const initialQuery = firebase.firestore().collection('class')
    .orderBy('createdAt', 'desc')
    .where(`accessibleUsers.${id}.hasAccessTo.classrooms.read`, '==', true)
    .where('keywords', 'array-contains', keyword)
    .limit(5);

现在问题在尝试建立此数据的索引时,我看到索引仅在特定ID的范围内出现。在StackOverflow中看到一些答案后,我对整个索引感到有些困惑。

基于此,Indexing unknown nodes in Firebase就是说删除.where(`accessibleUsers.${id}.hasAccessTo.class.read`, '==', true)并将规则添加到Firebase安全规则中以仅读取他有权访问的位置?

我该如何解决?任何帮助表示赞赏。

javascript firebase google-cloud-firestore firebase-security-rules
1个回答
0
投票

使用此代码:

.where(`accessibleUsers.${id}.hasAccessTo.classrooms.read`, '==', true)

您确实可以查询用户是否具有对多个教室的阅读权限。但是这样做的代价是您需要为id的每个值定义一个索引。

公平警告:虽然在技术上可行,但手动维护这些索引通常不可行。您可能要考虑存储一个使其更可行的数据结构,例如,通过存储每个用户的类。

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