我试图通过返回值等于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])
}
}
答案 0 :(得分:1)
您共享的代码不会读取任何数据,而只会使用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)
})
有关更多信息,请阅读sorting and filtering data上的Firebase文档。