获取 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" 

您可以保持实际代码不变的情况。