![](/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.