swift - 无法使用 Collection 检索 Firestore 文档
问题描述
您能否查看以下内容并帮助我理解为什么我的文档无法从 Firestore 中检索?我的代码如下:
class ContactStore : ObservableObject {
@Published var datas = [contactDataType]()
private var db = Firestore.firestore()
func fetchData() {
db.collection("Contact Details").addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
self.datas = documents.compactMap { queryDocumentSnapshot -> contactDataType? in
return try? queryDocumentSnapshot.data(as: contactDataType.self)
}
}
}
}
我的结构如下
struct contactDataType : Identifiable, Codable {
@DocumentID var id: String? = UUID().uuidString
var adno : String
var fullname : String
var firstname : String
var lastname : String
var registrationgroup : String
var priority1relation : String
var priority1fullname : String
var priority1maintelephone : String
var priority1mobile : String
var priority2relation : String
var priority2fullname : String
var priority2maintelephone : String
var priority2mobile : String
var priority3relation : String
var priority3fullname : String
var priority3maintelephone : String
var priority3mobile : String
var priority4relation : String
var priority4fullname : String
var priority4maintelephone : String
var priority4mobile : String
我可以使用以下代码检索文档,
class ContactStore : ObservableObject{
@Published var datas = [contactDataType]()
@AppStorage("selectedSchool") var selectedSchool: String = "selectedSchool"
init() {
let db = Firestore.firestore()
db.collection("School Name/\(selectedSchool/School Assets/\(**Struggling with this bit**)/Contact Details").getDocuments { (snap, err) in
if err != nil{
print((err?.localizedDescription)!)
return
}
for i in snap!.documents{
let id = i.documentID
let adno = i.get("ID") as? String ?? ""
let fullname = i.get("Full Name") as? String ?? ""
let firstname = i.get("First Name") as? String ?? ""
let lastname = i.get("Last Name") as? String ?? ""
let registrationgroup = i.get("Registration Group") as? String ?? ""
let priority1relation = i.get("Priority 1 Relation") as? String ?? ""
let priority1fullname = i.get("Priority 1 Full Name") as? String ?? ""
let priority1maintelephone = i.get("Priority 1 Main Telephone") as? String ?? ""
let priority1mobile = i.get("Priority 1 Mobile") as? String ?? ""
let priority2relation = i.get("Priority 2 Relation") as? String ?? ""
let priority2fullname = i.get("Priority 2 Full Name") as? String ?? ""
let priority2maintelephone = i.get("Priority 2 Main Telephone") as? String ?? ""
let priority2mobile = i.get("Priority 2 Mobile") as? String ?? ""
let priority3relation = i.get("Priority 3 Relation") as? String ?? ""
let priority3fullname = i.get("Priority 3 Full Name") as? String ?? ""
let priority3maintelephone = i.get("Priority 3 Main Telephone") as? String ?? ""
let priority3mobile = i.get("Priority 3 Mobile") as? String ?? ""
let priority4relation = i.get("Priority 4 Relation") as? String ?? ""
let priority4fullname = i.get("Priority 4 Full Name") as? String ?? ""
let priority4maintelephone = i.get("Priority 4 Main Telephone") as? String ?? ""
let priority4mobile = i.get("Priority 4 Mobile") as? String ?? ""
self.datas.append(contactDataType(id: id, adno: adno, fullname: fullname, firstname: firstname, lastname: lastname, registrationgroup: registrationgroup, priority1relation: priority1relation, priority1fullname: priority1fullname, priority1maintelephone: priority1maintelephone, priority1mobile: priority1mobile, priority2relation: priority2relation, priority2fullname: priority2fullname, priority2maintelephone: priority2maintelephone, priority2mobile: priority2mobile, priority3relation: priority3relation, priority3fullname: priority3fullname, priority3maintelephone: priority3maintelephone, priority3mobile: priority3mobile, priority4relation: priority4relation, priority4fullname: priority4fullname, priority4maintelephone: priority4maintelephone, priority4mobile: priority4mobile))
}
}
}
}
**因此,总的来说,我正在努力将文档 ID 传递到第二个代码中的路径中,或者使用第一个代码检索我的文档。我知道使用第一个会更好,但我真的很想将文档 ID 传递到文档路径中,而不是创建集合组查询,因为它似乎与我想做的不匹配。
我了解命名结构不太正确,应避免使用空格**
此时此刻,我已经制定了让所有人阅读的规则,所以我知道这不是安全问题。
问题 -
我可以将文档 ID 传递到路径中吗?我不确定,也找不到任何相关文档,尽管我已经通过 AppStorage for Selected School 进行了管理
集合组查询是更好的方法吗?
感谢您的任何建议。
解决方案
如果您无法构建要查询的子集合的完整路径,包括所有嵌套文档 ID,那么您将无法直接查询它。需要完整路径 - 没有通配符。
如果知道子集合的名称,您可以进行集合组查询,这将查询具有完全相同名称的所有子集合。如果您不想要所有这些子集合中的所有文档,您可以过滤查询以找到您要查找的内容。
推荐阅读
- javascript - 为对象文字reactjs中的不同键分配相同的值
- vb.net - 如何在图表上显示所有 x 轴值的标签
- php - php远程下载多张图片并裁剪
- android - AndroidManifest.xml 中缺少 AdActivity
- python - 使用 BeautifulSoup 时,html 在某些搜索结果中需要不同索引号的数据
- python - 不明白这个 TypeError: cannot concatenate 'str' and 'int' objects 异常
- excel - 筛选条件以筛选出 Excel 中的单元格
- c# - 在引用的类库中注入?
- python - 如何将 scipy.optimize 与数组函数一起使用?
- javascript - 标记模板文字如何在 JavaScript 中工作?