如何以正确的方式访问我的子集合?

Posted

技术标签:

【中文标题】如何以正确的方式访问我的子集合?【英文标题】:How to access my subcollection the correct way? 【发布时间】:2021-04-05 11:33:54 【问题描述】:

我正在努力寻找正确的解决方案来获取 Cloud Firestore 中用户子集合的值!

这是我的用户持有收藏“隶属关系”

这些是子集合“隶属关系”的内容。在这种情况下,有两个对组织的引用。

在运行时,我想确定特定用户是否连接到组织(组织密钥出现在引用的文档中)。

所以我有用户 ID 和组织 ID。你会如何解决这个问题?

干杯!

【问题讨论】:

请编辑问题以显示您尝试过的方法无法按您预期的方式工作。如果您是 Firestore 的新手并想了解如何执行查询,请从文档开始。 firebase.flutter.dev/docs/firestore/usage 【参考方案1】:

所以如果我理解正确的话,路径是:

firestore.collection('users')
.doc(user_id)
.collection('affiliations')
.doc(organization_id)
.get().then((snapshot)
    //do something with your snapshot
    );

以上是推荐的方式,但我认为您需要将组织中的文档重命名为组织 ID。

你可以做但没必要的事情:

firestore.collection('users').
    .doc(user_id)
    .collection('affiliations')
    .where('organization', isEqualTo: 'organization/idstring')
    .get((querySnapshot)
    //do somthing here
);

【讨论】:

就好像您在阅读我的想法 JayJay:您的(出色)答案假设 OP 实施了我更改其文档 ID 的建议。 :) 哦,现在我意识到了。是的,你是对的。我假设他正在这样做,因为否则他将需要查询“附属”集合并查找组织密钥等于他想要的某个 id 的文档。 非常感谢,伙计们!对,一个用户可能有多个组织被分配到。稍后我也想将其他资产存储在 affiliations 子集合下。这就是为什么我将项目标记为“组织化”并将其作为参考值。你会完全不同吗?【参考方案2】:

如果特定用户只能与特定组织关联一次,我建议也使用组织 ID 作为该从属关系的文档 ID。这样就不用查询了,可以直接检查是否存在具有该ID的文档。

虽然它可能不会产生很大的性能差异,但它会让您的数据更具可读性并且允许您检查用户是否与您的安全规则中的某个组织有关联——这不是在您当前的结构中可能。

【讨论】:

以上是关于如何以正确的方式访问我的子集合?的主要内容,如果未能解决你的问题,请参考以下文章

Firestore中的子集合在基本文档上可见吗?

如何在保持访问权限不变的同时将 Firestore 文档从一个子集合共享到另一个子集合?

Firestore:如何同时收听集合和子集合

Firebase Firestore 子集合

停止加载子集合,如果我更新父集合

如何从 Firestore 中删除集合或子集合?