基于嵌套值在Firebase实时数据库规则中为数据建立索引

时间:2019-01-29 22:07:27

标签: firebase firebase-realtime-database indexing

我的实时数据库中有以下JSON树:

{
  "old_characters" :
  {
      "Reptile" : {
        "kick" : 20,
        "punch" : 15
      },
      "Scorpion" : {
        "kick" : 15,
        "punch" : 10
      },
      "Sub-zero" : {
        "kick" : 30,
        "punch" : 10
      }
  },
  "new_characters" : {
    //...ect
  }
}

是否可以在firebase控制台中设置规则,以便我可以根据具有最高kick值的角色对数据进行索引?

约束是:
-character_name是动态的。
-Key“踢”是静态的,但其value是动态的。

结果应为:

  1. 先小于零(第30个踢)
  2. 爬行动物秒(第20个脚)
  3. 蝎子第三(第15脚)

1 个答案:

答案 0 :(得分:1)

您想要的似乎是一个对kick属性的相当简单的Firebase查询:

var ref = firebase.dababase().ref('old_characters');
var query = ref.orderByChild('kick');
query.once(function(snapshot) {
  snapshot.forEach(function(characterSnapshot) {
    console.log(characterSnapshot.key);
    console.log(characterSnapshot.child('kick').val());
  });
});

您会注意到,这会按升序打印结果。您可以:

  • 要么在客户端反转结果
  • 或向每个字符添加带有-1 * score的反向属性,然后对该字符进行排序

要了解有关反转/排序降序的更多信息,请查看以下一些先前的问题: