标题可能暗示这是无意义的,但我正在尝试限制从 Firebase 检索的数据量。 我有一个如下结构的查询:
for (final Map.Entry<String, String> entry : map.entrySet())
{
final Query dataQuery = mFirebaseRef.child("someChild").child(entry.getKey());
dataQuery.addListenerForSingleValueEvent(new ValueEventListener()
{
// do something with data
}
}
每个返回的孩子都有一个
timestamp
。 现在我想通过仅返回 Map 中时间戳比前一个查询更新的子项来进一步限制查询。
如果我形成这样的查询:
final Query dataQuery = mFirebaseRef.child("someChild").orderByChild("timestamp").startAt(timeMsec);
然后它就起作用了,查询返回满足该条件的所有子项。
但我想首先仅限于地图中的子项(使用
.child(entry.getKey()
),然后检查满足该条件的 timestamp
值。 即
for (final Map.Entry<String, String> entry : map.entrySet())
{
final Query dataQuery = mFirebaseRef.child("someChild").child(entry.getKey()).orderByChild("timestamp").startAt(timeMsec);
...
即使孩子的
timestamp
符合标准,这也不起作用。 这是一个特定的限制,当查询返回单个子项时,orderByChild
不起作用吗? 一个简单的检查是使用 timeMsec = 0
并且查询不会返回任何内容。
这是从“someChild”开始的 json:
"someChild": {
"6Pb5K88BiDOKOBlahBlahUID": {
"activeDays": 2,
"latest": 200,
"timestamp": 1713621397890,
"uid": "6Pb5K88BiDOKOBlahBlahUID",
},
"6pDVy45vzsgDYG7BlahBlahUID": {
"activeDays": 2,
"latest": 30,
"timestamp": 1712595611236,
"uid": "6pDVy45vzsgDYG7BBlahBlahUID",
},
无法将这些条件组合到单个查询中。您必须首先加载具有匹配时间戳的所有节点,然后在客户端的键上对其进行过滤 - 或者通过服务器上的键加载所有节点,然后在客户端的时间戳上对其进行过滤。
另请参阅: