【问题标题】:Flutter Firebase Dynamic QueryFlutter Firebase 动态查询
【发布时间】:2021-10-01 23:39:15
【问题描述】:

我有这样的查询;

    final _firestore = FirebaseFirestore.instance;
    
    var sRef = _firestore
              .collection("vehicles")
              .where("models.car", isEqualTo: "true")
              .where("models.plane", isEqualTo: "true")
              .where("models.motor", isEqualTo: "true");

通过这个查询,我可以同时查询哪个列表包括汽车、飞机和电机。但我想动态查询。因此我做了这个 for 循环;

   List<String> item = ["car", "motor", "plane"];

   var sRef;
    
   for (int i = 0; i < item.length; i++) {
          
            sRef = _firestore
                          .collection("vehicles").where("models.$item[i]", isEqualTo: "true");
                          
        }

但它并没有像我预期的那样工作。

当我想使用 for 循环显示包含项目列表中的元素的列表时,代码还会向我显示包含项目列表中最后一个元素的列表。

例如,在这个例子中,它显示了包含汽车、电机和飞机的列表,它还显示了仅包含飞机的列表,但我不想只显示包含飞机的列表,我只是想要显示包含汽车、马达、飞机的列表。

这些是我的 Firebase 文档。

Car Doc

Plane Doc

Motor Doc

All Doc

当我使用上面编写的 for 循环运行代码时,我会得到这样的输出,但我只想得到名为 ALL 的列表。

Output

为什么我得到名为 PLANE 的列表和名为 ALL 的列表。我只想列出名为 ALL。以及如何动态地进行查询。

不知何故,我需要使我在顶部显示的查询动态化,但正如我上面提到的,我使用的 for 循环不适用于这项工作。

【问题讨论】:

    标签: arrays firebase flutter google-cloud-firestore


    【解决方案1】:

    代码的问题在于,当您在每个循环上重新分配 sRef 变量时,只注册了最后一个 .where() 查询。

    解决方案是仅在变量为 null 时(即尚未为其分配值)为 sRef 变量赋值,并且在后续循环中,只需将 .where() 查询添加到具有赋值的变量。

    改变这个:

    for (int i = 0; i < item.length; i++) {
      sRef = _firestore.collection("vehicles").where("models.$item[i]", isEqualTo: "true");    
    }
    

    到这里:

    for (int i = 0; i < item.length; i++) {
      if (sRef == null) {
        sRef = _firestore.collection("vehicles").where("models.$item[i]", isEqualTo: "true");  
      } else {
        sRef = sRef.where("models.${item[i]}", isEqualTo: "true");  
      }  
    }
    

    【讨论】:

    • 现在它还显示项目列表的第一个元素,所以现在显示汽车列表和所有列表
    • 您的第二个代码 sn-p 有一个小错误,导致此处出现后续问题:stackoverflow.com/a/68561292
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2021-11-13
    • 2021-09-01
    • 2021-09-26
    • 1970-01-01
    • 2021-06-24
    • 2019-10-16
    相关资源
    最近更新 更多