我只想从最后 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 个值实时更改
最佳答案
如果您想要最多 50 个最新节点,您可以尝试按两个属性进行排序:
- 湿度
- 节点(或其键)的时间
Firebase 数据库查询只能对单个属性进行排序/过滤。
在许多情况下,可以将要过滤的值组合到单个(合成)属性中。有关此方法和其他方法的示例,请参阅我的答案:http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase 。但我认为这对你来说是不可能的。
我能想到的最好的方法是只监听最后 50 个节点,然后根据客户端的湿度对它们重新排序。
关于java - 从 Firebase 数据库中查找最后 50 个节点的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56552890/