我有这种JSON树:
ios - Firebase iOS SDK-如何计算表现良好的 child 人数?-LMLPHP

在我的应用程序的主页上,我只想显示组列表和该组中的消息数。

在正常情况下,我获取所有聊天并显示每个群组聊天消息的数量,但是如果有更多的群组,这样做会产生很大的性能影响。

我发现this用于Web API并已过时,但未找到iOS SDK。

那么如何在不检索所有消息的情况下从group1获取消息计数?

最佳答案

如何在每个组下添加一个 noOfMessages 节点,并在每次组消息计数更改时对其进行更新。您将必须进行查询以计算noOfChildren的时间,对吗?但是这种方式并非每次都如此。

对我来说,我刚刚创建了一个 func countNodes() ,每次添加一个孩子时都会被触发,或者您可以在NSTimer中使用timeInterval,正如您所说的,这很昂贵。

但是使用 .childAdded 时,您将仅收到附加的键-值对,而不是整个节点的值,然后您要做的就是用 .childAdded 计数的no更新您的 noOfMessages 节点的值。

至于您的情况,请将您的结构更改为:-

 chats :{
   group1 : {
         ...
       },
   },
 noOfMessages :{
    group1 : 18,
    group2 : 76,
   ....
   }

将观察者添加到每组eventType .childAdded 中。
FIRDatabase.database().reference().child("chats/group1").observeSingleEvent(of: .childAdded, with: {(snap) in

        //Run transaction to update your noOfMessage Count

    })

要获取noOfMessages计数:
FIRDatabase.database().reference().child("noOfMessages/group1").observeSingleEvent(of: .value, with: {(snap) in
      let count = snap.value as! Int
 })

10-07 12:44