使用一个集合的字段中的内容作为将在哪个集合中提取数据的决定因素



首先,我将简要解释我要做的事情。在Firestore中,我有一个集合specialities,在那里我将不同的专业名称存储在不同的文档中:

示例:

DOCUMENT         FIELD/CONTENT

type_0           spty : "Cardiologist"
type_1           spty : "Oftalmologist"

然后,我还有其他收藏品,每一个都有一个特色作为收藏品的名称。在每个专业收藏中,我都有:

示例:

COLLECTION: CARDIOLOGIST
DOCUMENT          FIELD/CONTENT
type_0          name: "John" | spty: "Cardiologist"
type_1          name: "James" | spty: "Cardiologist


COLLECTION: OFTALMOLOGIST
DOCUMENT          FIELD/CONTENT
type_0          name: "Wilson" | spty: "Oftalmologist"
type_1          name: "David" | spty: "Oftalmologist"

我想做的是:如果用户点击文本";心脏病学家";,他会得到名字";约翰;以及";詹姆斯";。但是,如果它点击文本";Oftalmologist";,他会得到名字";Wilson";以及";David";

关于代码,我有:

struct Spty: Identifiable, Codable{
@DocumentID var id: String?
var spty: String
var r: Int
var g: Int
var b: Int
}

class SptyViewModel: NSObject, ObservableObject{
@Published var specialities = [Spty]()
@Published var search = ""
func fetchData(){
Firestore.firestore().collection("specialities").addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot else {return }
self.specialities = documents.documents.compactMap { (doc) -> Spty? in
return try?  doc.data(as: Spty.self)
}
}
}
}

然后,问题就在哪里:

struct Details: Identifiable, Codable{
@DocumentID var id: String?
var name: String
var spty: String
}
class DetailsViewModel: NSObject, ObservableObject{
@Published var details = [Details]()
func getDetails(){
Firestore.firestore().collection(?????).addSnapshotListener { (querySnapshot, Error) in
guard let documents = querySnapshot else {return}
self.details = documents.documents.compactMap{ (doc) -> Details? in
return try? doc.data(as: Details.self)
}
}
}
}

为了成功地完成我想做的事情,我需要在collection((中找到一种方法来引用字段"的内容;spty";来自集合";特色菜";

经过大量的研究和测试,我还没有找到一种方法。我想知道这是否可能。如果是,如何做,如果不是,我还能用什么其他方式做。

一旦您从集合specialities中获取了特色菜列表,它就只是应用程序中的字符串数据。使用它就像使用任何其他字符串数据一样。collection((的参数是JUST一个字符串-不再是-因此您可以像第一个示例中那样使用文本"specialities",或者使用一个包含字符串的变量。如何存储第一次获取的结果,以及如何将其与";按钮";你没有在这里展示,但就这么简单。如何完成与Firestore无关的所有,所以你必须去其他地方。

最新更新