【问题标题】:获取Firebase中另一个节点内节点的子节点计数
【发布时间】:2022-01-23 13:38:33
【问题描述】:

我想要“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) {

                }
            });

但是没有成功。关于如何让孩子数数的任何建议?

【问题讨论】:

    标签: java android firebase firebase-realtime-database google-cloud-platform


    【解决方案1】:

    为了能够获得将weeksearch 字段设置为4112021yes 的所有孩子的计数,请使用以下查询:

    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。

    编辑:

    我想要的是subjectId下的所有节点。

    这对于您的实际数据库结构是不可能的。实时数据库中的查询在节点的平面列表上工作,您要在其中执行过滤器的值必须位于每个直接子节点下的固定路径。话虽如此,您应该使用更简单的数据库架构,以便您执行所需的查询。我能想到的最简单的方法是将 UID 添加为每个孩子的属性:

    Firebase-root
      |
      --- attendance
            |
            --- $subjectId
                  |
                  --- weeksearch: "4112021yes"
                  |
                  --- uid: "8IMf...ndA3" ?
    

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

    【讨论】:

    • 您的方法只获取指定的用户 ID。我想要的是subjectId下的所有节点。可以看到,subjectId有几个userId,每个userId都有我们需要的数据。现在我想要所有用户 ID 中的所有数据,而不仅仅是一个用户 ID,因为在所选用户 ID 之外可能还有其他节点可能包含我感兴趣的数据。
    • 请查看我更新的答案。试一试,告诉我它是否有效。
    • 好的。让我试试看
    • 如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记 (✔️) 来接受它。应将颜色更改为绿色。我真的很感激。谢谢!
    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多