【问题标题】:Flutter Firestore search from more than 1 collection来自多个集合的 Flutter Firestore 搜索
【发布时间】:2020-05-06 05:43:31
【问题描述】:

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

Tier-1
Tier-2
Tier-3

假设我想使用键“名称”进行搜索,而我想要实现的是,它将从 Tier-1 搜索到 第 3 层。如果Tier-1没有与“name”相同的文件,则继续到Tier-2,如果Tier-2有与“name”相同的文件,它将停止并返回该文件。有没有可能实现?或者我的逻辑完全错误

【问题讨论】:

  • 当然,听起来可能。您将为每个集合执行查询,直到找到您要查找的内容。
  • 是的,我只是有点困惑,因为我是这个 noSQL 的新手。所以基本上如果它返回null,它会执行另一个查询,对吗?直到它找到用户正在寻找的东西。感谢您的评论,我以后可能会删除这个问题 lmao
  • 您的子/集合被命名为 Tier-n 或者它们具有相同的名称?
  • Tier-n 因为也许我可以循环它,然后在它找到用户正在寻找的内容之后,我会打破它。它会起作用吗?

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

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

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

【讨论】:

  • 如果我使用 isGreaterThanOrEqualTo:,它会正常工作吗?或者会有性能问题等。很抱歉 Firestore 对我来说是新事物
  • isGreaterThanOrEqualTo 与 isequalto 不同,firebase 使用lexicographic ordering 解释字符串:stackoverflow.com/a/38226376/7015400,因此您必须检查您是否正确执行此操作,但关于性能问题它是相同的同样,您正在查询集合
  • 关于使用flutter的firebase教程,查看我的博客petercoding.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
  • 2020-11-23
  • 2021-04-04
  • 2020-03-22
  • 2014-07-31
  • 1970-01-01
相关资源
最近更新 更多