2016-12-07 32 views
1

我需要关于Firebase查询的帮助。目前我正在使用AngularFire2。查询Firebase的最高ID,然后添加到它

我一直在为此挣扎好几天。阅读每一份文件,每一个观看YouTube影片,并问了很多人,但我还是一无所获..

我的火力地堡结构是这样的:

ROOT 
    jobs 
     KYLigf4dFBvTTstR1Wy 
      id: "1" 
      customer: "Jeff F" 
      description: "Repair a chair" 
     KYLigACCViJVQffEoRl 
      id: "2" 
      customer: "Quick G" 
      description: "Install a light bulb" 
     KYLigSQasdCR3XfQ8WN 
      id: "3" 
      customer: "Justin S" 
      description: "Do everything for everyone" 
     KYLiddsfdsgWCKhjoiB 
      id: "4" 
      customer: "Heather D" 
      description: "Have a baby" 

所以我需要获取最高的ID。然后,我需要使用下一个ID将新条目添加到列表中。在这种情况下,它将是5。就是这样,这就是我需要的。我正在试图做我的头发。

我试过一百万种不同的方式,但是当我尝试使用push()时,问题出现了,一切都崩溃了,所以我找不到正确的路径。

我猜想另一种说法是,我想从Firebase中提取最高的ID,然后将其保存到随其更改的变量中。然后,只要我需要获取最新的ID,我就可以访问该变量 - 因为该数字将始终在变化。

+0

这通常需要一个事务,这意味着:1)它成为可伸缩性的瓶颈,2)它不会工作,当用户离线。如果您对这两者都行,请参阅http://stackoverflow.com/questions/16127389/real-time-click-link-counter。除此之外:如果您尝试过某些不起作用的功能,请分享[重现问题的最小代码](http://stackoverflow.com/help/mcve)。 –

回答

2

一种可能的解决方案是创建跟踪下一个ID的第二个节点。

当您插入一个新的作业时,请跟随该插入,并更新下一个JobID节点以增加该ID。这将简化检索下一个ID的需要。

请记住,使用Firebase的数据结构是非规范化的。它可以创建更多的节点,使读取更快。

ROOT 
jobs 
    KYLigf4dFBvTTstR1Wy 
     id: "1" 
     customer: "Jeff F" 
     description: "Repair a chair" 
    KYLigACCViJVQffEoRl 
     id: "2" 
     customer: "Quick G" 
     description: "Install a light bulb" 
    KYLigSQasdCR3XfQ8WN 
     id: "3" 
     customer: "Justin S" 
     description: "Do everything for everyone" 
    KYLiddsfdsgWCKhjoiB 
     id: "4" 
     customer: "Heather D" 
     description: "Have a baby" 
nextJobId: 5 // Create an index that provides the next Id. 
+0

起初我以为这听起来很荒谬,但我越想越觉得这是FireBase的工作原理。我太习惯于SQL了。这工作完美!谢谢! :D – Jus10

+1

来自SQL背景,我也在努力调整非规范化数据。这是Firebase的合法用例。祝你好运! – Gregg

1

使用火力地堡的怪异“KYLigf4dFBvTTst ......”键作为您的ID

我们都更加舒适与传统的id像1,2,3,因此使出浑身解数试图找到生成的方法他们。但是,创建常规ID的需求已经为您创建了一个复杂的问题。

Firebase的奇怪外观自动生成的密钥实际上旨在解决您的问题。它们具有递增ID的特征,即它们告诉你创建的日期顺序,并且还有效地提供唯一性,如UUID。

重要的是,它们允许多个客户端谁离线仍然生成非常可能的时间顺序和唯一的ID。可以生成

火力地堡键离线

他们不只是奇怪的看着,他们也奇迹般地能够产生没有互联网连接

生成它们的方法,

.push 

是一个纯客户端的操作,而你没有连接到网络,可以在浏览器中运行(例如)。它确实不是发送任何东西到数据库。

与此相关的是,可以随意生成并丢弃Firebase密钥而不会受到任何惩罚,并且您可以根据自己的喜好生成尽可能多的密钥:只有当您实际向密钥写入内容时,数据库。

放开1,2,3

它们来自预连接时代。 我想教教我的宝贝女儿来计算Firebase Id的数量...

+0

感谢您的意见。我一直在尝试最近越来越多地使用它。你说得对,这很容易。我仍然喜欢使用id来获得更多用户友好的索引,但仍然...试图让它走下去 – Jus10

相关问题