Javascript 如果父对象未知,则获取子id为x的childobject ,请考虑下面的数据结构: { "speed" : { "scores" : { "aHOBsddilrQ2lX3fal8v" : { "RrbEpWwfEAeVpnbXabSP" : { "event" : 959140, "judge" : "Svante", "zETdMyzb2OWgrVq9GJwv" : { "score" : 65, "timestamp" : 1466355355 }, "Jd0wtYEs74A2wc47LI7F" : { "score" : 75, "timestamp" : 1466355465 } } } } } }

Javascript 如果父对象未知,则获取子id为x的childobject ,请考虑下面的数据结构: { "speed" : { "scores" : { "aHOBsddilrQ2lX3fal8v" : { "RrbEpWwfEAeVpnbXabSP" : { "event" : 959140, "judge" : "Svante", "zETdMyzb2OWgrVq9GJwv" : { "score" : 65, "timestamp" : 1466355355 }, "Jd0wtYEs74A2wc47LI7F" : { "score" : 75, "timestamp" : 1466355465 } } } } } },javascript,firebase,angularfire,firebase-realtime-database,Javascript,Firebase,Angularfire,Firebase Realtime Database,如果我知道authuid和event:的值,但两个随机ID都不是唯一的,那么有没有办法用最新时间戳的分数来获得最深的孩子的分数 我尝试了不同的方法,包括for()和.orderBy[Child | Key | Value]().equalTo().limitToLast(1)(没有一个看起来足够好,甚至懒得分享…)这不起作用。我目前有一个非常肮脏的黑客解决方案,如果我在树的第二深部分(使用for和.length-3)再添加一个值,这个解决方案就会崩溃。有没有办法做到这一点 Firebase数据库

如果我知道
authuid
event:
的值,但两个随机ID都不是唯一的,那么有没有办法用最新时间戳的分数来获得最深的孩子的分数


我尝试了不同的方法,包括
for()
.orderBy[Child | Key | Value]().equalTo().limitToLast(1)(没有一个看起来足够好,甚至懒得分享…)这不起作用。我目前有一个非常肮脏的黑客解决方案,如果我在树的第二深部分(使用
for
.length-3
)再添加一个值,这个解决方案就会崩溃。有没有办法做到这一点

Firebase数据库可以查询嵌套子项,但前提是您知道路径。您所寻找的内容超出了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',... 

Firebase数据库可以查询嵌套子项,但前提是您知道路径。您所寻找的内容超出了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',... 

您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库控制台中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,一般来说,这是一件好事。@FrankvanPuffelen我知道,我从firebase发布以来就一直在使用它,但从v3开始,我就更认真了。。。我看到其他一些人在使用图像,我想这可能是praxis在这里介绍的。你的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库控制台中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,一般来说,这是一件好事。@FrankvanPuffelen我知道,我从firebase发布以来就一直在使用它,但从v3开始,我就更认真了。。。我看到一些人在使用图像,我想这可能是在这里的实践。这里的问题是a)不同的人在同一时间会同时得到1到12个不同的分数,在你的例子中,权限规则是很难处理的,b)另一方面,我有一个捕获和存储uid的页面,有没有办法捕获两个更深层次的名称,因为在该页面上,我循环了所有uid child中的所有child,让用户选择。使用$id只在数据的外层工作,也许是一种更像这样的方法?{“速度”:{“分数”:{“aHOBsddilrQ2lX3fal8v”:{“959140”:{“裁判”:“斯凡特”,“1466355”:{“分数”:65,}}}}}}}}}}}}}}这里的问题是a)不同的人在同一时间会同时得到1到12个不同的分数,权限规则方面,在您的示例中,这将是非常棘手的,b)另一方面,我有一个捕获和存储uid的页面,有没有办法捕获两个更深层次的名称,因为在该页面上,我循环了所有uid child中的所有child,让用户选择。使用$id只在数据的外层工作,也许是一种更像这样的方法?{“速度”:{“分数”:{“aHOBsddilrQ2lX3fal8v”:{“959140”:{“裁判”:“斯凡特”,“1466355”:{“分数”:65,}}}}}