2017-02-19 46 views
1

好吧,我有以下结构,我想拉出所有包含注册信息的节点。Swift Firebase:查询没有父键的子节点

{ 
    "events" : { 
    "hsoigjpoirt94pwjfjoijfdg" : { 
     "coverImageURL" : "http://www.who.int/about/Logo-WHO.jpg", 
     "dateTime" : "22 May, 2pm", 
     "eventDescription" : "Lorem ipsum ...", 
     "eventID" : "hsoigjpoirt94pwjfjoijfdg", 
     "lat" : 1.2945, 
     "lon" : 103.8822, 
     "registered" : { 
     "NJqoJ4iMTyXGGqfKADoKDLhDYQj1" : true 
     }, 
     "title" : "Volunteer at WHO" 
    }, 
    "hvasdhpoifah98whfaksad" : { 
     "coverImageURL" : "http://s3.amazonaws.com/patientslikeme/organizations/11/NKF_D_NEWE_RGB-original.png?1317242994", 
     "dateTime" : "24 July, 2:30pm", 
     "eventDescription" : "Lorem ipsum ...", 
     "eventID" : "hvasdhpoifah98whfaksad", 
     "lat" : 1.432079, 
     "lon" : 103.836871, 
     "registered" : { 
     "NJqoJ4iMTyXGGqfKADoKDLhDYQj1" : true 
     }, 
     "title" : "Help at Yishun Dialysis" 
    }, 
    "jioasdifueivaf5262d" : { 
     "coverImageURL" : "http://www.publichygienecouncil.sg/images/default-source/Photo-Galleries/walk-for-your-kidneys-by-nkf/nkf-litter-picking_25-jan-2014.jpg?sfvrsn=6", 
     "dateTime" : "12 Feb, 3-6pm", 
     "eventDescription" : "Lorem ipsum ...", 
     "eventID" : "jioasdifueivaf5262d", 
     "lat" : 1.33831, 
     "lon" : 103.705326, 
     "title" : "Charity Concert at NKF" 
    } 
    }, 
} 

我想提取全部包括“注册”的关键"NJqoJ4iMTyXGGqfKADoKDLhDYQj1" : true快照。到目前为止,我尝试用下面的,但它翻出一切:

ref.child("events").queryOrdered(byChild: "registered").observe(.value, with: { (snapshot) in 

      let snapValues = snapshot.value as! [String: AnyObject] 

      print(snapValues)     

     }) { (error) in 
      print(error.localizedDescription) 
     } 

仅供参考,每个节点都是比赛时,个人可以到注册事件。我想创建视图列出特定用户已注册的所有事件。

回答

1

对,就在我即将放弃的时候,我设法找到了解决方案来获得我想要的快照。下面是我如何去这样做:

ref.child("events").queryOrdered(byChild: "registered").observe(.value, with: { (snapshot) in 

      for snap in snapshot.children { 
       let snapDataSnapshot = snap as! FIRDataSnapshot 
       let snapValues = snapDataSnapshot.value as? [String: AnyObject] 

       if let snapWithReg = snapValues?["registered"] as? [String: Bool] { 

        if snapWithReg[userUID]! { 
         print(snap) 
        } 
       } 
      } 


     }) { (error) in 
      print(error.localizedDescription) 

     } 

的捕捉是与“注册”节点和userUID "NJqoJ4iMTyXGGqfKADoKDLhDYQj1" : true

+0

很好听,你找到了一个解决方案的所有卡扣。我可能忽略了一些东西,但是这个代码为'NJqoJ4iMTyXGGqfKADoKDLhDYQj1'过滤了什么? –

+1

@FrankvanPuffelen道歉,我可能没有更清楚,“NJqoJ4iMTyXGGqfKADoKDLhDYQj1”实际上是userUID。所以snapWithReg实际上打印出“Optional(”NJqoJ4iMTyXGGqfKADoKDLhDYQj1“:true)”。 – Koh

相关问题