获取 children 个节点在 Firebase 中另一个节点内的计数
Get children count of a node inside another node in Firebase
我想要 children 在“weeksearch”键中值为“4112021yes”的主题 ID 下的数字,如附图所示。我不想关注 userId,因为同一个主题 ID 下可以有多个用户 ID。我试过这样做
DatabaseReference reference2 = FirebaseDatabase.getInstance().getReference("attendance").child(subjectId);
Query query2 = reference2.orderByChild("weeksearch").equalTo(week+"yes");
query2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
long numberOfUsers = snapshot.getChildrenCount();
noOfAbsentStudents = (int) numberOfUsers;
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
但是没有成功。关于如何获得 children 计数的任何建议?
要获得 weeksearch
字段设置为 4112021yes
的所有 children 的计数,请使用以下查询:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = db.child("attendance").child(subjectId).child(uid);
Query queryByWeekSearch = uidRef.orderByChild("weeksearch").equalTo(week + "yes");
queryByWeekSearch.addValueEventListener(/* ... /*);
请记住,您需要在引用中添加所有节点,包括用户的 UID。
编辑:
What I want is all the nodes under the subjectId.
您的实际数据库结构不可能做到这一点。实时数据库中的查询在节点的平面列表上工作,其中要对其执行过滤器的值 必须 位于每个直接 child 节点下的固定路径.也就是说,您应该使用一个更简单的数据库模式,它可以让您执行所需的查询。我能想到的最简单的方法是将 UID 添加为每个 child:
的 属性
Firebase-root
|
--- attendance
|
--- $subjectId
|
--- weeksearch: "4112021yes"
|
--- uid: "8IMf...ndA3"
您可以保持实际代码不变的情况。
我想要 children 在“weeksearch”键中值为“4112021yes”的主题 ID 下的数字,如附图所示。我不想关注 userId,因为同一个主题 ID 下可以有多个用户 ID。我试过这样做
DatabaseReference reference2 = FirebaseDatabase.getInstance().getReference("attendance").child(subjectId);
Query query2 = reference2.orderByChild("weeksearch").equalTo(week+"yes");
query2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
long numberOfUsers = snapshot.getChildrenCount();
noOfAbsentStudents = (int) numberOfUsers;
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
但是没有成功。关于如何获得 children 计数的任何建议?
要获得 weeksearch
字段设置为 4112021yes
的所有 children 的计数,请使用以下查询:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = db.child("attendance").child(subjectId).child(uid);
Query queryByWeekSearch = uidRef.orderByChild("weeksearch").equalTo(week + "yes");
queryByWeekSearch.addValueEventListener(/* ... /*);
请记住,您需要在引用中添加所有节点,包括用户的 UID。
编辑:
What I want is all the nodes under the subjectId.
您的实际数据库结构不可能做到这一点。实时数据库中的查询在节点的平面列表上工作,其中要对其执行过滤器的值 必须 位于每个直接 child 节点下的固定路径.也就是说,您应该使用一个更简单的数据库模式,它可以让您执行所需的查询。我能想到的最简单的方法是将 UID 添加为每个 child:
的 属性Firebase-root
|
--- attendance
|
--- $subjectId
|
--- weeksearch: "4112021yes"
|
--- uid: "8IMf...ndA3"
您可以保持实际代码不变的情况。