【问题标题】:Get data from two collections - Firebase/Flutter从两个集合中获取数据 - Firebase/Flutter
【发布时间】:2021-03-05 14:32:37
【问题描述】:

我有一个关于我的应用程序的问题。我有两个名为 X 和 Y 的集合。我需要从这些集合中获取特定字段的数据。 “X”和“Y”集合具有与“name”相同的字段。我一直在尝试从 X 和 Y 集合中获取名称并将它们列出在我的页面上。我的代码:

 getNames(myId) async{

    return await FirebaseFirestore.instance.collection("X").where('ID',isEqualTo: myId ).snapshots();
  }

我可以从 X 集合中获取名称,并使用此代码在我的页面上列出它们。但是我无法同时获得 Y 集合名称和 X 并在我的页面上列出它们。 提前感谢您的关注和帮助。

【问题讨论】:

  • 如果你有两个集合,你需要两个查询。 Firestore 不会跨多个集合进行查询,collection group queries 除外,它适用于所有同名集合。您可以分别进行这两个查询,然后将结果合并到您的应用程序代码中。要么这样,要么将所有数据合并到一个集合中,并可能使用区分字段来区分 X 和 Y。
  • @DougStevenson 感谢您的回答。我明白你的意思了。将所有数据组合在一个集合中的第二个选项会使应用程序变得如此复杂。我选择了第一个选项,我尝试过但无法达到我想要的效果。就像 await FirebaseFirestore.instance.collection("X").where('ID',isEqualTo: myId ).snapshots(); return await FirebaseFirestore.instance.collection("Y").where('ID',isEqualTo: myId ).snapshots();当我这样做时,我只看到 Y 集合中的名称。如果你帮助了我,我会很高兴。
  • 这听起来与您在这里遇到的问题不同 - 如果您坚持将所有内容合并到一个集合中,请为此发布一个新问题。
  • 我不想将它们合并到一个集合中。只是想在我的页面上发布来自不同集合的相同字段
  • 如果您在网络上进行搜索,我相信您可以找到有关在 dart 中组合两个流的信息。

标签: firebase flutter google-cloud-firestore


【解决方案1】:
  getNames(myId) async{  
    QuerySnapshot response1  = await FirebaseFirestore.instance.collection("X").where('ID',isEqualTo: myId ).get();
    QuerySnapshot response2 = await FirebaseFirestore.instance.collection("Y").where('ID',isEqualTo: myId ).get();
    List<DocumentSnapshot> list1 = response1.docs;
    list1.addAll(response2.docs);
    return list1;
}

【讨论】:

  • 感谢您的回答。 Streamstream1 = await FirebaseFirestore.instance.collection("X").where('ID',isEqualTo: myId ).snapshots(); Stream stream2 = await FirebaseFirestore.instance.collection("Y").where('ID',isEqualTo: myId ).snapshots();如何在这里合并两个流?返回 ....;
  • 我真的很抱歉我给了你一个错误的代码,我刚刚编辑了我的答案,如果你有任何问题告诉我,它现在应该可以正常工作了。再次抱歉。
  • return StreamZip(([stream1, stream2])).asBroadcastStream(); StreamZip 不适合它
  • 对不起,我不熟悉这个 streamzip,但这可能会有所帮助 stackoverflow.com/questions/62955391/…
  • addAll 给出一个错误,提示“此表达式的类型为 void,因此无法使用其值”
猜你喜欢
  • 2020-09-07
  • 2020-09-08
  • 2022-11-06
  • 2021-03-06
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2018-03-24
  • 2021-01-06
相关资源
最近更新 更多