如果时间戳更新,Firebase 数据库将检索单个条目

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

我有一个如下所示的数据库:

path1 > uid0 > node  
      > uid1 > node
      > uid2 > node

该节点包含等于

timestamp
ServerValue.TIMESTAMP

如果我执行以下查询:

FirebaseDatabase.getInstance().getReference().child("path1")
.orderByChild("timestamp").startAfter(pastCutOff).limitToLast(limit);

我得到所有节点

timestamp > pastCutOff

如果我只想检索单个节点,我会这样做:

FirebaseDatabase.getInstance().getReference().child("path1")
.child(uid);

其中

uid
是数据库中已知的 uid。到目前为止一切都很好。

我只想在更新时间戳以减少带宽时才检索单个节点。

FirebaseDatabase.getInstance().getReference().child("path1")
.child(uid).orderByChild("timestamp").startAfter(pastCutOff);

但这不会返回任何结果。 我已经尝试了我能想到的所有组合,只得到我想要的节点。 如果我这样做:

FirebaseDatabase.getInstance().getReference().child("path1")
.child(uid).orderByValue().startAfter(pastCutOff, "timestamp");

然后逻辑就起作用了,但它只返回

long
中的
timestamp
值,而不是整个节点。

有没有一种组合可以只返回我想要的数据,而不必创建持久的

valueEventListener

android firebase firebase-realtime-database
1个回答
0
投票

您实际上正在尝试过滤两个值(UID 和时间戳),而这在实时数据库 API 中是不可能的。

常见的解决方法是将两个值组合成一个属性,然后对其进行排序/过滤。所以给每个节点一个额外的属性:

"uid_timestamp": "valueofuid_valueoftimestamp"

然后您可以对其进行排序和过滤:

FirebaseDatabase.getInstance().getReference().child("path1")
    .orderByChild("uid_timestamp").startAfter(uid+"_"+pastCutOff);

另请参阅:

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