getChildren 在特定键下在 Firebase 中计数,其中存在特定值
getChildren count in Firebase under a specific key, where a particular value exists
我如何在 Java 中实现这一点,我按照以下格式设置我的数据库,在通知下,我有一个 child 设置,其中包含一个由 Firebase 生成的随机密钥,然后我有其他child人如下。
Notification ----
dhsj37egshehhdeh----
name - john
userid - 939jjddehhd
status - unread
347747dhhshhdeh3----
name - doe
userid - 956jj53hdhhd
status - read
我正在尝试获取 children 计数,其中状态等于未读。
我尝试使用 reference.child("Notification").orderbyChild("status").equalTo("unread"){
然后我得到 children 计数。
但是我没有得到 children 计数,因为我假设首先必须引用 child 键然后我如何得到 children 计数?
既然您说您正在使用 Java,那么最简单的实现方法是:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference notificationRef = db.child("NotificationV2");
Query queryByStatus = notificationRef.orderByChild("unread").equalTo(true);
queryByStatus.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
DataSnapshot snapshot = task.getResult();
long count = snapshot.getChildrenCount();
Log.d("TAG", "count: " + count);
} else {
Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
}
}
});
logcat 中的结果将是 children 您的查询 returns 的确切数量。所以请注意,解决这个问题的关键是DataSnapshot#getChildrenCount()方法的使用。
编辑:
如果您已将字段名称从“状态”更改为“未读”并将值更改为布尔值,并将名称 Notification
更改为 NotificationV2
那么请检查我更新的代码。除此之外,我们看不到其他 5 个元素。但是,如果所有其他元素都存在于完全相同的级别,那么上面的代码肯定可以工作。
我如何在 Java 中实现这一点,我按照以下格式设置我的数据库,在通知下,我有一个 child 设置,其中包含一个由 Firebase 生成的随机密钥,然后我有其他child人如下。
Notification ----
dhsj37egshehhdeh----
name - john
userid - 939jjddehhd
status - unread
347747dhhshhdeh3----
name - doe
userid - 956jj53hdhhd
status - read
我正在尝试获取 children 计数,其中状态等于未读。
我尝试使用 reference.child("Notification").orderbyChild("status").equalTo("unread"){
然后我得到 children 计数。
但是我没有得到 children 计数,因为我假设首先必须引用 child 键然后我如何得到 children 计数?
既然您说您正在使用 Java,那么最简单的实现方法是:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference notificationRef = db.child("NotificationV2");
Query queryByStatus = notificationRef.orderByChild("unread").equalTo(true);
queryByStatus.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
DataSnapshot snapshot = task.getResult();
long count = snapshot.getChildrenCount();
Log.d("TAG", "count: " + count);
} else {
Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
}
}
});
logcat 中的结果将是 children 您的查询 returns 的确切数量。所以请注意,解决这个问题的关键是DataSnapshot#getChildrenCount()方法的使用。
编辑:
如果您已将字段名称从“状态”更改为“未读”并将值更改为布尔值,并将名称 Notification
更改为 NotificationV2
那么请检查我更新的代码。除此之外,我们看不到其他 5 个元素。但是,如果所有其他元素都存在于完全相同的级别,那么上面的代码肯定可以工作。