限制单个子节点的 Firebase 查询

问题描述 投票:0回答:1

标题可能暗示这是无意义的,但我正在尝试限制从 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",
    },
java android firebase firebase-realtime-database
1个回答
0
投票

无法将这些条件组合到单个查询中。您必须首先加载具有匹配时间戳的所有节点,然后在客户端的键上对其进行过滤 - 或者通过服务器上的键加载所有节点,然后在客户端的时间戳上对其进行过滤。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.