【问题标题】:Firebase Database: how to compare two valuesFirebase 数据库:如何比较两个值
【发布时间】:2018-08-21 18:19:17
【问题描述】:

在我的 Firebase 数据库中,我的数据结构类似于:

帖子 ID (1a3b3c4d5e) 由 ChildByAutoId() 函数生成。 用户 ID (fn394nf9u3) 是用户的 UID。

在我的应用中,我有一个 UILabel(作者),我想用创建帖子的用户的“全名”来更新它。

由于我在数据库的用户部分中引用了帖子 ID,我假设必须有一些代码(if 语句?)来检查值是否存在,如果存在,则更新标签。

你能帮忙吗?

【问题讨论】:

  • 为什么不简单地把名字和帖子一起保存,这样你就会得到类似:1a3b3c4d5e = {description:"world", title:"Hello", author:"John Smith"}

标签: json swift firebase firebase-realtime-database nosql


【解决方案1】:

如果您可以更改结构,那就太好了,因为我认为您没有为数据库维护适当的结构。

您应该在 Post 节点中再取一个键名 createdBy,这样实际上的结构将是

{description:"Thus the post is here", title:"Hello User", createdBy:"Javed Multani"}

一旦你这样做了,就很容易获得用户的详细信息。

不道德的解决方案,

您可以在从 firabase 的 post 节点显示 Post 时实现这一点。你肯定会得到自动生成的 postid,如: 1a3b3c4d5e

现在首先你应该首先只获取帖子,然后在成功获取数据和解析中,你必须获取用户并在用户内部找到用户,方法是放置 postId == UserPostId 之类的代码如果找到匹配则采用 fullname从那里获得价值。

【讨论】:

    【解决方案2】:

    虽然可以进行查询 (ref.child("Users").queryOrdered(byChild: "Posts/1a3b3c4d5e").queryEqual(toValue:true)),但您需要为每个特定用户的帖子建立索引,以使该查询有效运行。这不是一个可行的策略。

    与使用 NoSQL 数据库时一样:如果您需要执行当前数据模型不允许的操作,请更改您的数据模型以允许该用例。

    在这种情况下,可以将用户的 UID 添加到每个帖子,或者将用户名添加到每个帖子(如 Andre 建议的那样)并确定 if/how you deal with user name changes

    在 NoSQL 数据库(例如 Firebase 和 Firestore)中,拥有这样的双向关系数据以实现双向高效查找非常常见。其实我写了一个单独的answer about dealing with many-to-many relations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2017-10-29
      • 2011-05-29
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多