在目录中的所有节点下搜索特定值

时间:2017-12-21 01:02:02

标签: swift firebase firebase-realtime-database

我正在努力弄清楚如何在特定目录中的任何给定节点下删除/查找某个键/ id。

以下是我的数据库的外观:

 this image

userIDpostID是通过使用.childByAutoId()生成的。因此,您可以推断,搜索特定字符串.e.g。用户名是不可能的。但是,在调用函数时,我确实通过参数传递了postID。我尝试了几种方法,但没有运气。实质上这就是我想做的(伪代码):

  • 转到“Feed”目录
  • 已经传递了postID,因此请查看Feed
  • 下的每个节点
  • 如果postID存在于特定节点下,请删除该节点,否则,移至下一个节点
  • 继续,直到此特定目录中不存在该节点

我确实引用了我的Feed目录 - API.Feed.REF_FEED。我尝试使用.parent.queryOrdered.queryEqualTo等。

1 个答案:

答案 0 :(得分:0)

这将有效:

let query = feedRef.queryOrdered(byChild: "-L....VJ").equalTo(true)
query.observe(.childAdded, with: { (snapshot) -> Void in
  snapshot.ref.removeValue()
})

这种方法的问题虽然它要求你在-L....VJ上有一个索引,因此你可能想要删除每个帖子ID。这很快变得难以管理。

出于这个原因,请考虑向您的数据库添加反向查找地图:将每个帖子ID映射到其Feed中包含该帖子的用户:

userposts
  $postid
    userid1: true
    userid2: true

现在,您可以快速找到具有特定帖子的所有用户,然后从这些用户的Feed中删除帖子。