Firebase 数据库不等于请求 - 替代解决方案(针对 iOS)
Firebase database Not equal request - Alternative solution (for iOS)
我正在使用具有 Json 结构的 Firebase 数据库来管理用户评论。
{
"post-comments" : {
"post-id-1" : {
"comment-id-11" : {
"author" : "user1",
"text" : "Hello world",
"uid" : "user-id-2"
},....
}
我想提取所有评论,但不包括当前用户的评论。
在 SQL 这将被翻译成:
Select * 来自 post-评论,其中 id !="user-id-2"
我知道 Firebase 数据库不提供根据值(即:用户 ID != ...)排除节点的方法。
因此有没有其他解决方案可以解决这个问题。通过更改数据库结构,或者在加载数据后处理数据源。
对于后者,我使用的是 FirebaseTableViewDataSource。有没有办法在查询后过滤数据?
非常感谢
第一个解决方案是通过.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 将降低内存使用量。
我正在使用具有 Json 结构的 Firebase 数据库来管理用户评论。
{
"post-comments" : {
"post-id-1" : {
"comment-id-11" : {
"author" : "user1",
"text" : "Hello world",
"uid" : "user-id-2"
},....
}
我想提取所有评论,但不包括当前用户的评论。
在 SQL 这将被翻译成: Select * 来自 post-评论,其中 id !="user-id-2"
我知道 Firebase 数据库不提供根据值(即:用户 ID != ...)排除节点的方法。
因此有没有其他解决方案可以解决这个问题。通过更改数据库结构,或者在加载数据后处理数据源。
对于后者,我使用的是 FirebaseTableViewDataSource。有没有办法在查询后过滤数据?
非常感谢
第一个解决方案是通过.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 将降低内存使用量。