【问题标题】:How to retrieve documents stored in one collection from the ids saved in another collection as documents in flutter firestore如何从保存在另一个集合中的id中检索存储在一个集合中的文档作为flutter firestore中的文档
【发布时间】:2022-02-04 19:30:13
【问题描述】:

在我的颤振项目中,我有 2 个两个 firestore 集合,一个是用户集合,其中存储了所有用户详细信息,另一个集合是其中的关注者,每个用户都有一个子集合,其中他/她的关注者用户 ID 作为文档。我的问题是如何从用户集合中检索这些关注者的详细信息?

这是我的用户收藏

这里是追随者集合

【问题讨论】:

  • 嗨马尔代夫,您在这方面取得了进展吗?我试图在下面提供答案。你有没有机会检查一下,这有意义吗?如果我的回答有用,请点击它左侧的点赞按钮 (▲)。如果它回答了您的问题,请单击复选标记 (✓) 接受它。这样其他人就知道你得到了(足够的)帮助

标签: firebase flutter google-cloud-firestore


【解决方案1】:

要读取一个集合或文档一次使用Get Query

您可以使用 listview builder 包装 GetUserName 并传递 userId。



class GetUserName extends StatelessWidget {
  final String documentId;

  GetUserName(this.documentId);

  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('users');

    return FutureBuilder<DocumentSnapshot>(
      future: users.doc(documentId).get(),
      builder:
          (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {

        if (snapshot.hasError) {
          return Text("Something went wrong");
        }

        if (snapshot.hasData && !snapshot.data!.exists) {
          return Text("Document does not exist");
        }

        if (snapshot.connectionState == ConnectionState.done) {
          Map<String, dynamic> data = snapshot.data!.data() as Map<String, dynamic>;
          return Text("Full Name: ${data['full_name']} ${data['last_name']}");
        }

        return Text("loading");
      },
    );
  }
}

【讨论】:

    【解决方案2】:

    我认为您正在构建数据,就好像您在关系数据库中工作一样。 Firestore 不支持 SQL 数据库等外键,因此您无法检索 SQL 等嵌套数据。 Firestore 是一个没有任何引用概念的非 SQL 数据库。见Firestore data model

    在 Firestore 中,关系通常通过存储您要“引用”的文档的 ID 来建模。从这个意义上说,您可能不需要将“用户”文档存储在“关注者”中,但“用户 ID”字段就足够了(您正在尝试这样做)。需要注意的是,这种数据布局的代价是必须先从“followers”获取“user_id”,然后才能获取实际的用户数据。您可以在文章link1link2 和其他thread 中阅读有关数据非规范化和建模关系的更多信息。

    在 Firestore 中,您需要单独获取引用的数据,您可以与关注者数据并行单独获取所有用户数据并将其存储在地图中,或者如果您最初不需要用户数据,则在需要时获取每个用户数据,例如当您检查每个关注者的详细信息时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多