2016-07-28 59 views
2

我有一个有日期的数据列表。我通常查询按日期排序的数据。但是当我需要从中间键来回取回某些数据时,我处于这种情况。我有这样的日期(orderByChild("date"))排序的数据:Firebase从中间键向上和向下查询数据

{ 
    "key1":{ 
     "date": "2016-07-25" 
    }, 
    "key2":{ 
     "date": "2016-07-26" 
    }, 
    "key3":{ 
     "date": "2016-07-27" 
    }, 
    "key4":{ 
     "date": "2016-07-28" 
    }, 
    "key5":{ 
     "date": "2016-07-29" 
    } 
} 

注:日期可以在未来也。每个日期可以有多个条目。两个日期之间可能有差距。

如果我知道key3,我怎样才能检索一个以上key3(即key2)数据结束列表(即key5)的?

因此,例如,

  • 与KEY3 - > KEY2到KEY5(直到结束)。
  • with key4 - > key3 to key5(until end)。

如何使用密钥查询密码,并按子女排序“date”。我有一个key2。从这我需要获取列表。

我试图在部分中获取结果,一个用于上部,另一个用于较低。但是,当我使用orderByChild("date")时,我不能使用带键的endAt()(Docs说:您可以结合startAt()endAt()方法将结果限制在指定范围)。

有什么办法可以检索基于关键的列表?在一个去或部分?

+0

这是不可能的在任何语言甚至java也不允许你 firebase是不支持这个。 您可以手动使用for循环查找key3 –

+0

可能有成千上万条记录,因此按键查找对性能不利。但有什么办法我可以查询它的两部分。 1以上的key3和全部以下的key3。那也可以。 – kirtan403

+0

没有firebase是使用二进制搜索树算法,所以你没有必要担心firebase性能 –

回答

0

我改变了键的定义方式。

代替push(),我用date和push()的组合来设置密钥。

比如,新密钥的格式如下YYYYMMDD<PUSH_KEY>。采用这种格式,我可以用2个不同的查询查询数据。

一个用钥匙结尾:

ref.orderByKey().endAt(key).limitToLast(1) 

和一个开始键:

ref.orderByKey().startAt(key) 

这让我从两个从中间键两端的结果。

谢谢@puf和大家的意见和帮助。

+0

@ Kirten403 ...我也堆积在同样的问题..我的要求是什么..我想一次只检索10条记录,并通过拉刷新剩余的10条记录,我想直到我达到在Firebase数据的末尾...您能否帮助或提出您的建议 –

+0

@RavindraKushwaha因此,您可能需要根据您的要求在回收站适配器或列表视图中实现您自己的登录。当用户拉动时,通过维护开始键并将查询限制为10条记录来进行查询以检索记录。每次将结果追加到原始结果列表中。希望你得到了我想说的一点.. – kirtan403

+0

@ Kirten403 ....但现在我已登录,并获得第一次,在10的限制..现在我想检索10更多的记录载入更多...你可以PLZ帮助我...我已经创建了启动,限制和其他Firebase的方法的逻辑,但没有得到预期的结果.. –