因为我想在我的Android应用程序中创建一个排行榜,我最近开始学习firebase并创建了一个数据库,如图所示。这里我有几个注册用户; “user”节点下是每个用户的userUID,userUID节点下是每个用户的数据。我计划通过查询“用户”节点下的所有对象并按“总IMP”对它们进行排序来实现制作排行榜,但问题是“totalIMP”不是“用户”节点的直接子节点,并且因此我不能使用这样的代码:
Query query = databaseReference.child("users").orderByChild("totalIMPs");
实现这一目标。有没有其他方法我可以“不改变”我的数据库结构?谢谢。
答案 0 :(得分:-3)
首先:Firebase - 当你添加信息时,firebase就像乱七八糟的东西一样。
如果您想在查询中订购数据库,那么当您从firebase获取信息时,
您需要调查范围查询和限制查询,我更喜欢firebase旧控制台中的示例,在这部分您可以找到一个非常简单的示例,并专注于结果...
主题范围查询和限制查询的链接: https://www.firebase.com/docs/web/guide/retrieving-data.html#section-ordered-data
旧版本和新版本之间的差异非常小,因此您可以从这个逻辑开始。
如果您想在尝试添加信息时订购数据,则需要知道低值和最大值,以及相同的.. 范围查询和限制查询强>
我们可以通过将该密钥传递给orderByChild()来按照所有共享的子密钥对节点进行排序。例如,使用我们的恐龙事实样本数据库,我们可以使用以下查询阅读所有按高度排序的恐龙:
var ref = new Firebase("https://dinosaur-facts.firebaseio.com/dinosaurs");
ref.orderByChild("height").on("child_added", function(snapshot) {
console.log(snapshot.key() + " was " + snapshot.val().height + " meters tall");
});
参考:https://www.firebase.com/docs/web/api/query/orderbychild.html
我们可以使用orderByValue()方法按子节点的顺序对节点进行排序。例如,在我们的恐龙事实样本数据库中使用dino体育得分数据,我们可以使用以下查询显示前三名得分恐龙:
var scoresRef = new Firebase("https://dinosaur-facts.firebaseio.com/scores");
scoresRef.orderByValue().limitToLast(3).on("value", function(snapshot) {
snapshot.forEach(function(data) {
console.log("The " + data.key() + " dinosaur's score is " + data.val());
});
});