gpt4 book ai didi

swift - 用户交互的 Firebase 数据结构最佳实践

转载 作者:行者123 更新时间:2023-11-28 15:11:02 26 4
gpt4 key购买 nike

我正在构建一个评论应用程序,并想找出构建 Firebase 数据库以存储用户对标题和彼此帖子的评论、点赞和评论的最佳实践。我正在使用 Xcode 和 Swift。

  1. 我是否要创建一个单独的 REVIEWS 节点来存储所有评论,并且有一个 USER ID 子节点作为评论作者的用户 ID,还有一个 TITLE ID 节点作为被评论标题的 ID?

  2. 我是否在标题和用户节点中嵌套与标题或用户关联的评论?

  3. 当需要显示用户的所有评论时,我是否需要使用用户 ID 查询数据库?

  4. 为了显示标题的所有评论,我是否使用标题的 ID 进行查询?

谢谢

最佳答案

这很难给出一个答案,因为有 100 种不同的结构可以工作。这是一个交叉链接的双引用结构来说明这一点

movies
movie_0
title: "Monty Python and the Holy Grail"
reviewed_by
uid_1: tre
reviews
review_0: true

reviews
review_0
movie_id: "movie_0"
uid: "uid_1"
review: "Best movie evah"

users
uid_0
name: "Tim"
reviewed_movies:
movie_0: true
reviews
review_0: true

有了这种疯狂,您可以:

query movies for which users reviewed it or which reviews
query reviews for certain users, certain movies and that the actual review was
query users for names, which movies that user reviewed and what the reviews were

所以问题是;您需要查询什么?

让我们拿走你的#3

When it's time to display say all a user's reviews, do I then query the database using the user's ID?

我给出的结构,如果你想得到所有用户的评论,你根本不用查询!你直接观察那个users节点

let ref = fbRef.child("users").child("uid_0").child("reviews")
ref.observe...

然后您可以遍历结果以获得评论引用

同样,您可以查询评论节点以获取所有评论,其中 uid 是相关用户的 uid。

我知道这不是一个具体的答案,但它确实提供了指南

编辑

其中一条评论是一个具体问题,所以让我这样解决。

假设唯一的目标是查看特定电影的所有评论。结构可以大大简化:

movies
movie_0
title: "Monty Python and the Holy Grail"
reviews
review_0
movie_id: "movie_0"
uid: "uid_1"
review: "Best movie evah"
users
uid_1
name: "Tim"

然后假设我们知道电影和 movie_0 的电影 ID。为了获得评论和用户,这样的事情会起作用

let reviewsRef = self.ref.child("reviews")
let query = reviewsRef.queryOrdered(byChild: "movie_id").queryEqual(toValue: "movie_0")
query.observeSingleEvent(of: .value) { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let uid = dict["uid"] as! String
let review = dict["review"] as! String

let userRef = self.ref.child("users").child(uid)
userRef.observeSingleEvent(of: .value, with: { userSnapshot in
let userDict = userSnapshot.value as! [String: Any]
let userName = userDict["name"] as! String
print("\(userName) said \(review)")
})
}
}

关于swift - 用户交互的 Firebase 数据结构最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47623995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com