【问题标题】:Query a specific document inside 2 streamBuilder查询 2 streamBuilder 中的特定文档
【发布时间】:2021-12-06 09:02:30
【问题描述】:

我创建了 2 个不同的集合(用户和关注)。

现在我想:

  1. 根据 id 获取存在于关注 collection("list") 中的文档。

  2. currentUid = doc.id 的第一个集合中获取用户数据(用于第二个集合)。

  3. ListTile中显示数据。

第一次收藏

await FirebaseFirestore.instance.collection("users").doc(currentUid).set({"name":username,"photoUrl":url,"uid":currentUid}); 

第二次收集

await FirebaseFirestore.instance.collection("follow").doc(currentUid).collection("list").doc(otherId); 

我用过这个,但它不能正常工作

     body:StreamBuilder<QuerySnapshot>(
              stream: FirebaseFirestore.instance
              .collection("follow")
              .doc(user!.uid)
              .collection("list")
              .snapshots(),
          builder: (context, snapshot1) {
            if (!snapshot1.hasData) {
              return Container();
            } else {
              return StreamBuilder<QuerySnapshot>(
                stream: FirebaseFirestore.instance
                    .collection("users")
                    .where("uid",
                        isEqualTo:
                            snapshot1.data!.docs.map((e) => e.id).toList())
                    .snapshots(),
                builder: (context, snapshot2) {
                  if (!snapshot2.hasData) {
                    return Container();
                  } else {
                    return ListView(
                      children: snapshot2.data!.docs.map((e) {
                        return ListTile(
                          leading: CircleAvatar(
                            backgroundImage: NetworkImage(e.get('url')),
                            radius: 30,
                          ),
                          title: Text(e.get('username')),
                        );
                      }).toList(),
                    );
                  }
                },
              );

【问题讨论】:

    标签: android firebase flutter dart google-cloud-firestore


    【解决方案1】:

    您应该使用in query 而不是equal to 查询。

    in 查询返回给定字段匹配任何 比较值。

    cloud_firestorein 查询的语法如下:

     .where(field, whereIn: listOfFields)
    

    解决方案:

    改变这个:

     .where("uid", isEqualTo: snapshot1.data!.docs.map((e) => e.id).toList())
    

    到这里:

     .where("uid", whereIn: snapshot1.data!.docs.map((e) => e.id).toList())
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2014-11-21
      • 2013-09-10
      • 2019-03-09
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      相关资源
      最近更新 更多