【问题标题】:Firebase queryEqual doesn't workFirebase queryEqual 不起作用
【发布时间】:2017-03-05 14:42:38
【问题描述】:

我的 Firebase 中有以下层次结构:

func invitedEvents() {
        DataService.ds.REF_EVENTS.queryOrdered(byChild: "eventParticipant").observe(.childAdded, with: { (snap) in
            print("KEEEY:\(snap.key)")
            let value = snap.value as? NSDictionary
            if snap.exists() , value?["eventParticipant"] != nil{
                print("eventParticipant:\(value?["eventParticipant"])")
                var valueArray = value?["eventParticipant"]  as! [[String:AnyObject]]
                for (index, element) in valueArray.enumerated() {
                    print("valueArray\(index): \(element)")
                    //self.selectedContacts.append(element as! Participant)
                    if element["partPhone"] as! String == "00 11 111 1111" {
                    print("KEY:\(snap.key) PHONE:\(element["partPhone"])")
                        self.eventKey = snap.key
                        print("snap.key:\(snap.key)")
                        //child("eventItem").child("eventOrganized").queryOrdered(byChild: snap.key).queryEqual(toValue: "1")

                        DataService.ds.REF_USERS.child("eventItem").child("eventOrganized").child(snap.key).observe(.value, with: { (snapshot) in
                            print("With Snapshot Key: \(snapshot)")
                        })
                        //DataService.ds.REF_USERS.queryOrdered(byChild: "provider").queryEqual(toValue: "email").observe(.value, with: { (snapshot) in
                        //    print("With Provider:\(snapshot.value)")
                        //})

                        DataService.ds.REF_EVENTS.child(self.eventKey).observe(.value, with: { (snap) in

                            print(snap)
                            if snap.value is NSNull {
                                print("Event is not found!")
                            }
                            else {

                                let value = snap.value as? NSDictionary
                                print(value?["eventLocation"] ,
                                      value?["eventCurrency"],
                                      value?["eventDesc"],
                                      value?["eventBeginDate"],
                                      value?["eventEndDate"],
                                      value?["eventCurrency"],
                                      value?["eventLocation"],
                                      value?["eventName"],
                                      value?["eventDesc"],
                                      value?["eventPrice"])

                                if
                                    let eventAddress = value?["eventLocation"] ,
                                    let eventCurrency = value?["eventCurrency"],
                                    let eventDesc = value?["eventDesc"],
                                    let eventBeginDate = value?["eventBeginDate"],
                                    let eventEndDate = value?["eventEndDate"],
                                    let eventImg = value?["eventCurrency"],
                                    let eventLocation = value?["eventLocation"],
                                    let eventName2 = value?["eventName"],
                                    let eventNote = value?["eventDesc"],
                                    let eventPrice = value?["eventPrice"]
                                {
                                    let eventDetails = Event(
                                        eventAddress: value?["eventLocation"] as! String,
                                        eventCurrency: value?["eventCurrency"] as! String,
                                        eventDesc: value?["eventDesc"] as! String,
                                        eventBeginDate: value?["eventBeginDate"] as! String,
                                        eventEndDate: value?["eventEndDate"] as! String,
                                        eventImg: value?["eventCurrency"] as! String,
                                        eventLikes: 1,
                                        eventLocation: value?["eventLocation"] as! String,
                                        eventName: value?["eventName"] as! String,
                                        eventNote: value?["eventDesc"] as! String,
                                        eventPrice: value?["eventPrice"] as! String,
                                        eventCreated: value?["eventCreated"] as! String,
                                        eventStatus: 0 as! Int?
                                    )

                                    //print(eventDetails)
                                    let eventName = value?["eventName"] as! String
                                    self.userPastEventNameList.append(eventName)
                                    self.events.append(eventDetails)
                                    print(eventAddress,eventCurrency,eventDesc, eventBeginDate, eventEndDate, eventImg, eventLocation, eventName2, eventNote, eventPrice)
                                }
                                else {
                                    print("NULL FOUND")


                                }

                            }
                            DispatchQueue.main.async{
                                self.tableView.reloadData()
                            }
                            self.removeLoadingScreen()
                        })

                    //})
                    }
                }


            }
        })
}

并且 snap.keys 在 print("snap.key:(snap.key)"):

snap.key:-KePXAuTADuTLTsZ7qbe
snap.key:-KePjqMKrARQmp-gTss-
snap.key:-KePsCS5rB4lTwy6GWea
snap.key:-KePwdRQPFFX30_GDAOK
snap.key:-KePyNVghX4MkSxI_1fx
snap.key:-KePz200QsJp6CSb3bVN

如果我正在使用它,那么我会得到一个快照:

print("snap.key:\(snap.key)")
DataService.ds.REF_USERS.queryOrdered(byChild: "provider").queryEqual(toValue: "email").observe(.value, with: { (snapshot) in
print("With Provider:\(snapshot.value)")})

结果:

With Provider:Optional({
 JIbrGLdfCDUpMUOHEu7KzRye8ZK2 =     {
     provider = email;
};
 })

如果我使用这个,那么我不会得到任何结果:

 print("snap.key:\(snap.key)")    
 DataService.ds.REF_USERS.child("eventItem").child("eventOrganized").queryOrdered(byChild: snap.key).queryEqual(toValue: 1).observe(.value, with: { (snapshot) in ("With Snapshot Key:\(snapshot.value)")})

结果:

With Snapshot Key:Optional(<null>)

有人可以帮助我吗?我做错了什么?

【问题讨论】:

  • eventItem 和您的根目录之间缺少链接。那个 V9T3 ... 键。
  • 我不明白,彼得。我应该如何编写查询?
  • 我们能否看到更多您的数据库结构(因为您使用了很多我们看不到的引用)以及 REF_USERS 和 REF_EVENTS 所引用的内容?另外,在这种情况下 self.eventKey 是什么?
  • 这就是我不想发布整个函数的原因。这只是令人困惑。我的问题是如何找到值为 1 的键? self.eventkey 现在并不重要,因为我把它放在那里只是为了测试查询的那一部分。后来实际上我想使用值为1的那些键并替换self.eventkey。
  • 好的,现在检查我的答案,这是你想要的吗?

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

对,

DataService.ds.REF_USERS.child("eventItem").child("eventOrganized").queryOrdered(byChild: snap.key).queryEqual(toValue: 1).observe(.value, with: { (snapshot) in ("With Snapshot Key:\(snapshot.value)")})

这不起作用,因为您缺少对 V9T3cEgEGPRmlkMQb32hxa5gG7L2 节点的引用。

如果您希望该键下的所有 eventOrganized 节点的值为 1,那么您需要使用以下查询。

DataService.ds.REF_USERS.child("V9T3cEgEGPRmIkMQb32hxa5gG7L2").child("eventItem").child("eventOrganized").queryOrderedByValue().queryEqual(toValue: 1).observe(.value, with: { (snapshot) in
        print("Snapshot Value:\(snapshot.value)")
})

显然您不想直接引用 V9T3cEgEGPRmlkMQb32hxa5gG7L2,您应该将此密钥存储在一个变量中以实现可重用性(也许您有,我无法在您的代码中说明)。我想这就是你想要的。

【讨论】:

猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2014-08-04
  • 2018-09-18
  • 2018-06-26
  • 2018-02-07
相关资源
最近更新 更多