gpt4 book ai didi

flutter - 如何在Flutter项目中合并两个Firestore查询,以及如何从这两个流中删除重复的文档?

转载 作者:行者123 更新时间:2023-12-03 04:53:10 26 4
gpt4 key购买 nike

我需要在flutter项目中合并两个firestore查询流。我该怎么做呢?
我尝试了StreamZip([Stream1,stream2])方法来合并流,它对我有用。
但是流中可能包含相同的文档。因此,当我列出它们时,所有文档都被列出,即使有重复也是如此。如何从这两个流中删除重复的文档?

   Stream<List<QuerySnapshot>> getData() {
Stream defaultStream1 = _firestore
.collection("Gyms")
.where("gymPlaceTags", arrayContainsAny: ["dubai"])
.orderBy('createdAt', descending: true)
.snapshots();
Stream defaultStream2 = _firestore
.collection("Gyms")
.where("gymFavTags", arrayContainsAny: ["ajman"])
.orderBy('createdAt', descending: true)
.snapshots();
return StreamZip([defaultStream1, defaultStream2]);
}

最佳答案

您需要执行几个步骤:

  • map流返回另一个List<DocumentSnapshot>而不是List<QuerySnapshot>
  • map函数中,在列表上使用fold删除重复项并映射到List<DocumentSnapshot>
  • fold函数中,遍历QuerySnapshot中的每个文档,并在添加之前检查是否存在具有相同ID的文档。
    Stream<List<DocumentSnapshot>> merge(Stream<List<QuerySnapshot>> streamFromStreamZip) {
    return streamFromStreamZip.map((List<QuerySnapshot> list) {
    return list.fold([], (distinctList, snapshot) {
    snapshot.documents.forEach((DocumentSnapshot doc) {
    final newDocument = distinctList.firstWhere(
    (DocumentSnapshot listed) =>
    listed.documentId == doc.documentId,
    orElse: () => null) == null;
    if (newDocument) {
    distinctList.add(doc);
    }
    });
    return distinctList;
    });
    });
    }

    注意:我没有运行这段代码,但是应该是这样的。
  • 关于flutter - 如何在Flutter项目中合并两个Firestore查询,以及如何从这两个流中删除重复的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61053852/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com