如果未知父母

时间:2016-06-19 17:07:09

标签: javascript firebase angularfire firebase-realtime-database

因此,请考虑以下数据结构:

{
  "speed" : {
    "scores" : {
      "aHOBsddilrQ2lX3fal8v" : {
        "RrbEpWwfEAeVpnbXabSP" : {
          "event" : 959140,
          "judge" : "Svante",
          "zETdMyzb2OWgrVq9GJwv" : {
            "score" : 65,
            "timestamp" : 1466355355
          },
          "Jd0wtYEs74A2wc47LI7F" : {
            "score" : 75,
            "timestamp" : 1466355465
          }
        }
      }
    }
  }
} 

如果我知道authuidevent:的值但是没有randomid(两者都是唯一的)

,有没有办法让最深的孩子得分最新的时间戳得分

我尝试了for ().orderBy[Child|Key|Value]().equalTo().limitToLast(1);的不同方法(这些方法看起来都不够好,甚至不用分担......)但这些方法都不起作用。我有一个非常脏的黑客攻击解决方案,如果我再添加一个值到树的第二个最深处(使用for.length - 3),那么它会破坏吗?

1 个答案:

答案 0 :(得分:1)

Firebase数据库可以查询嵌套的子级,但前提是您知道路径。您正在寻找的内容远远超出了Firebase的查询功能,该功能始终必须在查询功能与数据库的实时性之间取得平衡。

与NoSQL数据库一样,解决方案是更改数据模型以满足您的需求。对于这种情况,我会在该事件的id下设置一个具有每个事件最新分数的节点:

{
  "speed" : {
    "mostRecentScoresPerEvent" : {
      "event959140": {
        "score" : 75
      }
    }
  }
} 

现在您可以通过简单的设置操作更新分数:

ref.child('speed/mostRecentScoresPerEvent/event'+eventId).set(42);

使用以下方式阅读:

ref.child('speed/mostRecentScoresPerEvent/event'+eventId).on('value',...