在我的Firebase数据库中,我有一个与此类似的数据结构:
帖子ID(1a3b3c4d5e)由ChildByAutoId()
函数生成。
用户ID(fn394nf9u3)是用户的UID。
在我的应用中,我有一个UILabel(作者),我想用创建帖子的用户的“全名”更新它。
由于我在数据库的用户部分中引用了帖子ID,我假设必须有一些代码(if语句?)来检查该值是否存在,如果存在,则更新标签。
你可以帮忙吗?
答案 0 :(得分:0)
虽然可以执行查询(ref.child("Users").queryOrdered(byChild: "Posts/1a3b3c4d5e").queryEqual(toValue:true)
),但您需要在每个特定用户的帖子上都有一个索引,以允许此查询高效运行。这不是一个可行的策略。
与使用NoSQL数据库时一样:如果您需要执行当前数据模型不允许的操作,请更改数据模型以允许用例。
在这种情况下,可以将用户的UID添加到每个帖子,或者替换为每个帖子添加用户名(如安德烈建议的那样)并确定if/how you deal with user name changes。
在NoSQL数据库(如Firebase和Firestore)中,在两个方向上都有这样的关系数据以允许双向高效查找。实际上我写了一个单独的answer about dealing with many-to-many relations。
答案 1 :(得分:0)
如果您可以更改结构,那么这非常好,因为我不认为您正在维护数据库的正确结构。
你应该在Post节点中再加上一个关键名称 createdBy ,这样就可以实现
{description:"Thus the post is here", title:"Hello User", createdBy:"Javed Multani"}
一旦你这样做,很容易得到用户的细节。
或强>
不道德的解决方案,
你可以实现这一点,就像你要从文章的post节点显示Post一样。肯定你会得到自动生成的postid,如: 的 1a3b3c4d5e 强>
现在首先你应该首先只获得帖子然后在成功获取数据并解析你必须得到用户并通过输入类似postId == UserPostId的代码来找到匹配找到的匹配 fullname 来自那里的价值。