如何查询按子集合中定义的角色筛选的Firestore文档



在安全规则中!视频#6建议使用private_data子集合中定义的角色创建一个安全规则,其中包含一个"private"文档:

allow update: if (get(/databases/$(database)/documents/restaurants/$(restaurantID)/private_data/private).data.roles[request.auth.uid] in ['editor', 'owner'];

使用web API,如何查询用户具有编辑器或所有者权限的文档集?我看不出where子句可以引用子集合文档。

类似的东西

const q = query(
collection(db, 'restaurants'),
where(new FieldPath('private_data', 'private', 'roles', 'user_123'),  'in', ['editor', 'owner'])
);

Firestore查询只能根据每个文档本身的数据筛选文档。无法根据另一个文档中的数据进行筛选,无论是来自同一集合还是来自另一个(子(集合。

这意味着,虽然可以根据roles子集合中的信息限制写入和获取(单个文档读取(操作,但不可能在查询中使用这些相同的文档。

如果您需要这个用例,常见的方法是将子集合中的必要数据复制到父文档中,并在那里对其进行筛选。在处理NoSQL数据库时,您经常会看到这样一种模式,即通过数据写入来允许或简化特定的读取。

最新更新