Firebase 从多个收藏中进行Flatter Firestore搜索
所以我要做的是从2个或更多的集合中搜索。这是我的收藏: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
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的集合,查看我的博客