我正在尝试为简单的社交媒体概念创建一个简单的Cloud Firestore数据库结构。
每个用户最多可以有一个帖子(“最喜欢的”帖子除外),可以随时更新。用户的“最喜欢”版本的帖子会保存为单独的帖子,只要用户在其当前版本的帖子上收到的热门数量超过其最喜欢的版本,就可以更新。
我提出了一个结构,但我对NoSQL数据库缺乏经验。这个结构看起来会支持我的系统吗?这些明显的问题也会阻止重要的查询吗?
USERS (collection)
DocumentID - userId gathered from Authentication uid
firstName: String
lastName: String
username: String
birthdate: Timestamp
accountCreationDate: Timestamp
post: postId (when user is created, create a default post document for them since there is only one post per user)
bestPost: postId
FRIENDS (subcollection)
DocumentID - userId of the friend
username: String
POSTS (collection)
DocumentID - postId randomly generated
authorUserId: String
authorUsername: String
text: String
imagePath: String
location: String
likesCount: Number
LIKES (subcollection)
DocumentID - userID of the liker
username: String
朋友子集合存储朋友用户名,因此通过用户名创建该用户的朋友列表很容易。我假设我可以通过将朋友的documentID与用户的documentID相匹配来获取该用户朋友的更多信息。
同样喜欢子集合
答案 0 :(得分:2)
结构看起来还不错。关于在Cloud Firestore中执行此操作,我会提供一些意见。
更新likesCount
如果帖子喜欢的可能不常见(每秒少于一个),您可以创建一个云功能(由likes
子集合.onCreate
触发),更新{{1使用事务。确保用户无法在规则范围内修改likesCount
。
允许用户编辑最喜欢的帖子
您需要构建规则来强制执行此操作。这可能有点复杂,可能需要一些战略思考(除非你已经有了解决方案)。