【问题标题】:Find max value from last 50 nodes from Firebase database从 Firebase 数据库中查找最后 50 个节点的最大值
【发布时间】:2019-06-11 23:35:18
【问题描述】:

我只想从最后 50 个节点中找到最大值。我曾经使用 orderByChild 和 limitToLast 方法,但它从所有节点中找到最大值,而不仅仅是从最后 50 个节点中找到。 这是我的数据库:

还有我的代码:

    database = FirebaseDatabase.getInstance();
            reference = database.getReference("sensor");

 Query query = reference.orderByChild("hum").limitToLast(50);
        query.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for(DataSnapshot myDataSnapshot : dataSnapshot.getChildren())
                {
                humTemp = myDataSnapshot.child("hum").getValue().toString();
                humMax.setText(humTemp);
                }
            }
            public void onCancelled(DatabaseError firebaseError) {

            }

        });

所以,如您所见,我尝试从最后 50 个节点中找到 hum 变量的最大值。 附言数据库中不断出现新节点,因此最大值应每 50 个值实时变化

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    如果您想要 50 个最新节点中的最大值,您尝试按两个属性排序:

    • 湿度
    • 节点(或其密钥)的时间

    Firebase 数据库查询只能对单个属性进行排序/过滤。

    在许多情况下,您可以将要过滤的值组合成一个(综合)属性。有关此方法和其他方法的示例,请在此处查看我的答案:http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase。但我认为这对你来说是不可能的。

    我能想到的最好的办法就是只监听最后 50 个节点,然后在客户端的湿度上重新排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多