Firebase数据库不等于请求 - 替代解决方案(适用于iOS)

时间:2016-06-10 15:51:04

标签: ios database firebase datasource

我正在使用带有Json结构的Firebase数据库来管理用户'评价。

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

我想提取所有评论,但不包括当前用户的评论。

在SQL中,这将被翻译成: 从帖子评论中选择*,其中id!=" user-id-2"

据我所知,Firebase数据库不提供基于值存在而排除节点的方法(即:用户ID!= ...)。

因此,有没有其他解决方案可以解决这个问题。通过更改数据库结构,可能是在加载数据后处理数据源。

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

非常感谢

1 个答案:

答案 0 :(得分:4)

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

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将降低内存使用量。