Firebase 从多个收藏中进行Flatter Firestore搜索

Firebase 从多个收藏中进行Flatter Firestore搜索,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,所以我要做的是从2个或更多的集合中搜索。这是我的收藏: Tier-1 Tier-2 Tier-3 假设我想用关键字名称搜索,我想实现的是,它将从第1层搜索到第2层 三级。如果Tier-1中没有与name相等的文档,它将继续到Tier-2,如果Tier-2中有与name相等的文档,它将停止并返回该文档。有可能实现吗?或者我的逻辑完全错了基本上你说的是,你有以下结构: Tier-1 (collection) -> docId(document) -> Tier-2 (collectio

所以我要做的是从2个或更多的集合中搜索。这是我的收藏:

Tier-1
Tier-2
Tier-3
假设我想用关键字名称搜索,我想实现的是,它将从第1层搜索到第2层
三级。如果Tier-1中没有与name相等的文档,它将继续到Tier-2,如果Tier-2中有与name相等的文档,它将停止并返回该文档。有可能实现吗?或者我的逻辑完全错了

基本上你说的是,你有以下结构:

Tier-1 (collection) -> docId(document) -> Tier-2 (collection) -> docId(document) -> Tier-3 (collection) -> docId(document)
您可以执行以下操作:

  void getData() {
    Firestore.instance
        .collection("Tier-1")
        .where("name", isEqualTo: "peter")
        .getDocuments()
        .then((querySnapshot) {
      querySnapshot.documents.forEach((result) {
        if (result.exists) {
          print(result.data);
        } else {
          Firestore.instance
              .collectionGroup("Tier-2")
              .where("name", isEqualTo: "peter")
              .getDocuments()
              .then((querySnapshot) {
            querySnapshot.documents.forEach((result) {
              if (result.exists) {
                print(result.data);
              } else {
                Firestore.instance
                    .collectionGroup("Tier-3")
                    .where("name", isEqualTo: "peter")
                    .getDocuments()
                    .then((querySnapshot) {
                  querySnapshot.documents.forEach((result) {
                    if (result.exists) {
                      print(result.data);
                    } else {}
                  });
                });
              }
            });
          });
        }
      });
    });
  }

首先检查顶级收藏Tier-1,如果它没有返回结果,则需要检查子收藏Tier-2

当然,这听起来是可能的。您将对每个集合执行一个查询,直到找到您要查找的内容。是的,我只是有点困惑,因为我是noSQL的新手。所以基本上如果它返回null,它将执行另一个查询,对吗?直到找到用户要找的东西。感谢您的评论,我可能会在以后删除这个问题,因为您的子/集合名为Tier-n,或者它们的名称相同?Tier-n,因为也许我可以循环它,然后在它找到用户要查找的内容后,我会将其打断。它会工作吗?如果我使用的是大于或等于:,它会工作得很好吗?或者会有性能问题等等。很抱歉Firestore对MeiserathanoreQualto来说是新事物不同于isequalto,firebase使用字符串的字典顺序进行解释:,因此您必须检查是否正确,但关于性能问题,它与isequalto相同,您查询的是关于Flatter教程firebase的集合,查看我的博客