![](/img/trans.png)
[英]How to fetch subcollections in firestore without documentID in Swift?
[英]Swift + Firestore: How to fetch related objects
我在 Swift 中有这个模型
import SwiftUI
import FirebaseFirestoreSwift
import FirebaseFirestore
struct Tweet: Codable, Identifiable, Hashable {
var id: UUID = UUID()
var content: String
var ownerId: String
var owner: UserProfile
var likes: Int
@ServerTimestamp var createdAt: Timestamp?
}
它存储在 Firestore 集合“推文”中:
tweets: {
[
"ds4a65d4a65sd46das65d4": {
"content" : "safsafds",
"createdAt" : "...",
"id" : "sdfsdfsd",
"likes" : 0,
"ownerId" : "123",
"owner" : {
"bio": "aaasdasdassa",
"username": "asdasd",
"profileImage": "aaa",
"userId": "123",
},
}, ...
]
}
当我获取所有推文时,我会正常获取带有所有者数据的信息。 但所有者数据可能是旧的。 假设用户更改了他的个人资料图片或用户名...等,因此推文所有者数据可能不是最新的。
因此,假设我们要从推文模型中删除 owner 字段,并保留 ownerId。
struct Tweet: Codable, Identifiable, Hashable {
var id: UUID = UUID()
var content: String
var ownerId: String
// var owner: UserProfile <-- THIS IS REMOVED
var likes: Int
@ServerTimestamp var createdAt: Timestamp?
}
考虑一下,最基本的例子是当你的对象只有简单的数据类型时。
{
"name": “Sam’s website”,
"hits": “200”
}
相应的 Swift 结构可能如下所示:
Struct Website: Identifiable, Codable{
@DocumentID public let id: String?
let name: String
let hits: Int
}
要将 Firestore 对象导入 Swift,您需要使用 .data(as:) 方法。 在下面的场景中,我获取 Firestore 集合网站中的所有文档并将它们放入名为 self.websites 的属性中
db.collection("websites")
.addSnapshotListener { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
guard let documents = querySnapshot?.documents else {
print("no documents")
return
}
self.websites = documents
.flatMap { document -> Website in
return try! document.data(as: Website.self)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.