【发布时间】:2021-07-28 12:00:36
【问题描述】:
我有这样的查询;
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 循环显示包含项目列表中的元素的列表时,代码还会向我显示包含项目列表中最后一个元素的列表。
例如,在这个例子中,它显示了包含汽车、电机和飞机的列表,它还显示了仅包含飞机的列表,但我不想只显示包含飞机的列表,我只是想要显示包含汽车、马达、飞机的列表。
在我尝试了这个 for 循环之后;
for (int i = 0; i < item.length; i++) {
if (sRef == null) {
sRef = _firestore.collection("vehicles").where("models.${item[i]}", isEqualTo: "true");
} else {
sRef.where("models.${item[i]}", isEqualTo: "true");
}
}
但这次 for 循环代码还向我显示了包含项目列表中第一个元素的列表。
例如,在此示例中,它向我显示了包含汽车、汽车和飞机的列表,它还显示了仅包含汽车的列表,但我不想仅显示包含汽车的列表,我只是想要显示包含汽车、马达、飞机的列表。
为什么我在使用第一个循环时得到名为 PLANE 的列表和名为 ALL 的列表,或者为什么在使用第二个 for 循环时得到名为 CAR 的列表和名为 ALL 的列表。我只想列出名为 ALL 的列表。
与这 2 种方法不同,必须有一种方法可以使该查询以某种方式动态化。 Flutter不可能是这么不完整的语言,我找了很多地方,尝试了很多解决方案,但是我找不到解决这个问题的方法,世界上真的有办法做到这一点。
这些是我的 Firebase 文档,以便更好地了解我的数据库;
【问题讨论】:
-
试试
"models.${item[i]}"。现在输出应该是models.car等等。 DartPad 上的示例
标签: firebase flutter google-cloud-firestore