如何检索Firebase数据库值以计算平均值

时间:2018-09-21 02:05:09

标签: swift firebase dictionary firebase-realtime-database

我一直在尝试创建一个社交应用程序,以允许人们给他人评分。我已经能够检索并显示每个评论的评分,但是我一直难以获得所有评分来计算平均值。

这是我的代码:

data.insert(0, 'rundate', inpdate)

我的firebase数据库结构如下所示:

data = data[data.columns[-1:].tolist()+data.columns[:-1].tolist()]

我想使用子节点“ STAR”进行计算

请,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是问题所在;该结构可能太深,您的代码与该结构不匹配。

您正在观察具有两个子节点的Review节点

Review
   -75YFH...
   -MAc9ou...

请记住,那些子节点也有子节点。

-7590W...
   -LM90W...
   -LM90o...
-MAc9ou...
   -LM90a

for循环遍历-75YFH和-MAc9ou的顶级子节点,因此此代码

let placeSnap = child as! DataSnapshot
let ratingsSnap = placeSnap.childSnapshot(forPath: "STAR")

是真的

let ratingsSnap = -75YFH.childSnapshot(forPath: "STAR")

let ratingsSnap = -MAc9ou.childSnapshot(forPath: "STAR")

并且您会看到STAR不是这些节点的子代。

根据您的结构,-75YFH和-MAc9ou的两个顶部节点中的每个节点都需要另一个循环,以迭代其子节点并检索STAR节点

   var counter = 0      
   placesRef.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children { //this is -75YFH and -MAc9ou
            let placeSnap = child as! DataSnapshot 
            for childOfPlace in placeSnap.children { //this is -LM90W and -LM90o
                 let childOfPlaceSnap = childOfPlace as! DataSnapshot                     
                 //let ratingsSnap = childOfPlaceSnap.childSnapshot(forPath: "STAR")
                 //I prefer the following...
                 let dict = childOfPlaceSnap.value as! [String: Any]
                 let val = dict["STAR"] as! Int
                 counter += val
            }
        }
        print("total stars: \(counter)") //or tableView.reloadData()
    })

注意:在我的iPad上键入该代码,因此未经测试,因此请勿复制粘贴。这个概念是合理的。