Swift 4 и Firebase Как считать дочерние значения - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь подсчитать, как все прошло, возвращая всех пользователей, чьи значения равны 1. Это правильный способ сделать это. Ниже приведена функция, которую я использую, чтобы установить, будут ли они. Может ли кто-нибудь помочь мне вернуть счет всех, кто собирается

func didTapGoing(for cell: HomePostCell) {
    guard let indexPath = collectionView?.indexPath(for: cell) else { return }
    var post = self.posts[indexPath.item]

    guard let postId = post.id else { return }

    guard let uid = FIRAuth.auth()?.currentUser?.uid else { return }

    let values = [uid: post.isGoing == true ? 0 : 1]
    FIRDatabase.database().reference().child("going").child(postId).updateChildValues(values) { (err, _) in

        if let err = err {
            print("Failed to pick going", err)
            return
        }

        post.isGoing = !post.isGoing
        self.posts[indexPath.item] = post
        self.collectionView?.reloadItems(at: [indexPath])
    }
}

Database

1 Ответ

0 голосов
/ 14 сентября 2018

Код, которым вы поделились, не читает никаких данных, а только обновляет их с updateChildValues.

Чтобы подсчитать количество дочерних узлов, вам нужно прочитать эти узлы и затем вызвать DataSnapshot.childrenCount.

FIRDatabase.database().reference().child("going").child(postId).observe(DataEventType.value, with: { (snapshot) in
  print(snapshot.childrenCount)
})

Если вы хотите только подсчитатьдочерние узлы, которые имеют значение 1, вы должны сделать:

FIRDatabase.database().reference().child("going").child(postId)
  .queryOrderedByValue().queryEqual(toValue: 1)
  .observe(DataEventType.value, with: { (snapshot) in
    print(snapshot.childrenCount)
  })

Подробнее об этом читайте в документации Firebase по сортировке и фильтрации данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...