我在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":
tweets: {
[
"ds4a65d4a65sd46das65d4": {
"content" : "safsafds",
"createdAt" : "...",
"id" : "sdfsdfsd",
"likes" : 0,
"ownerId" : "123",
"owner" : {
"bio": "aaasdasdassa",
"username": "asdasd",
"profileImage": "aaa",
"userId": "123",
},
}, ...
]
}
当我获取所有tweet时,我通常会获得带有所有者数据的信息。但车主数据可能是旧的。假设用户已经更改了他的个人资料图像或用户名……等等,因此tweets所有者数据可能不是最新的。
那么,假设我们想要从tweet模型中删除owner字段,并保留ownerId.
如何使用以下模型获取所有具有所有者数据的tweet ?
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?
}
我相信你想要实现的是更新Tweet集合中的所有者数据。因此,您试图同时查询您的Tweet集合和引用的所有者集合。这涉及到更新/重构服务器端的数据。这是不可行的。
Firestore没有跨集合的服务器端连接或投影的概念。读取的每个查询或文档只能从单个集合中获取数据,或者从集合组查询中具有相同名称的所有集合中获取数据。如果需要从两个集合中加载数据,则至少需要两次读取。
您也可以参考类似的堆栈溢出情况。