代码之家  ›  专栏  ›  技术社区  ›  Svante

如果父对象未知,则获取child-id=x的childobject

  •  0
  • Svante  · 技术社区  · 8 年前

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

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

    如果我知道的话,有没有办法用最新时间戳的分数来获得最深孩子的分数 authuid 和的价值 event: 但这两个随机变量都不是(都是唯一的)

    我尝试了不同的方法 for () .orderBy[Child|Key|Value]().equalTo().limitToLast(1); (所有这些看起来都不够好,甚至都不愿意分享……)这不管用。我目前有一个非常肮脏和破解的解决方案,如果我再给树的第二深部分添加一个值(使用 for .length - 3 )有办法洗这个吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   puf - Frank van Puffelen    8 年前

    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',...