繁体   English   中英

如何从保存在另一个集合中的 id 作为 flutter firestore 中的文档检索存储在一个集合中的文档

[英]How to retrieve documents stored in one collection from the ids saved in another collection as documents in flutter firestore

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

这是我的用户收藏

用户

这是追随者集合追随者

使用Get Query读取集合或文档

您可以使用列表视图构建器包装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");
      },
    );
  }
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM