【发布时间】:2020-10-26 12:58:04
【问题描述】:
我有一个 firebase 应用程序,其中包含一个集合,其中包含在应用程序上发布的帖子,每个帖子都有一个包含帖子数据的文档。作为用户,您可以点赞帖子,并且您点赞帖子的 UID 存储在用户文档中。作为应用程序的过去,我希望能够检索用户喜欢的所有帖子。我有两种方法:
第一个选项我可以使用 where 字段选项:
static func getLikedPosts(likedIDs: [String], completion: @escaping ((_ data: [Post]) -> Void)) {
db.collection("posts").whereField("postID", in: likedIDs).getDocuments {(querySnapshot, err) in
if let err = err {
print(err)
} else {
var listings: [Listing] = []
for doc in querySnapshot!.documents {
// ...
let post = Post()
posts.append(post)
}
completion(posts)
}
}
}
第二个选项是我有一个功能来获取一个帖子:
static func getPost(listingID: String, completion: @escaping ((_ data: Post) -> Void)) {
db.collection("posts").document(postID).getDocument { (doc, err) in
if let err = err {
print(err)
} else {
if let doc = doc, doc.exists {
if let data = doc.data() {
// ...
let post = Post()
completion(post)
}
}
}
}
}
然后为了获得所有喜欢的帖子,我使用以下函数:
static func getLikedPosts(likedIDs: [String], completion: @escaping ((_ data: [Post]) -> Void)) {
var posts = [Post]()
for id in likedIDs {
getPost(postID: id) { (post) in
listings.append(post)
if posts.count == likedIDs.count {
completion(posts)
}
}
}
}
我的问题是,如果在大量帖子上更高效/可扩展,或者是否有更好的选择,这两个选项中的哪一个?我想使用 where 字段的时间复杂度会更高,但不确定 firebase 如何管理这些查询。
【问题讨论】:
标签: swift firebase google-cloud-firestore