【问题标题】:Firebase database Not equal request - Alternative solution (for iOS)Firebase 数据库不等于请求 - 替代解决方案(适用于 iOS)
【发布时间】:2016-06-10 15:51:03
【问题描述】:

我正在使用具有 Json 结构的 Firebase 数据库来管理用户的 cmets。

 {
    "post-comments" : {
            "post-id-1" : {
              "comment-id-11" : {
                "author" : "user1",
                "text" : "Hello world",
                "uid" : "user-id-2"
              },....
 }

我想拉出所有的 cmets,但不包括当前用户的。

在 SQL 中,这将被翻译成: 选择 * from post-cmets where id !="user-id-2"

我了解 Firebase 数据库不提供基于值的存在来排除节点的方法(即:用户 id != ...)。

因此有任何替代解决方案来解决这个问题。通过更改数据库结构,或者在加载数据后处理数据源。

对于后者,我使用的是 FirebaseTableViewDataSource。有没有办法在查询后过滤数据?

非常感谢

【问题讨论】:

  • 请显示您当前的数据源代码

标签: ios database firebase datasource


【解决方案1】:

第一个解决方案是通过 .ChildAdded 加载 cmets 并忽略具有当前 user_id 的 cmets

let commentsRef = self.myRootRef.childByAppendingPath("comments")

commentsRef.observeEventType(.ChildAdded, withBlock: { snapshot in

  let uid = snapshot.value["uid"] as! String
  if uid != current_uid {
    //do stuff
  }            
})

您可以对此进行扩展并通过 .Value 加载所有内容,并在代码中迭代子项。该方法将取决于您加载的节点数量 - .ChildAdded 将降低内存使用量。

【讨论】:

  • 感谢您回复杰。这非常有用。请问还有什么办法?
  • @Yacine 好吧,我想我可能还有另一种选择,但从未想出一个,所以我从我的答案中编辑了该评论。如果有什么事我会再次更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多