我试图查询数据库以检查多个不相关的键,以检查参数并编译适合我条件的列表。
我已经有一个列表,该列表是通过对数据库另一个节点的先前查询创建的。哪个返回了我要检查的键列表。
现在,我想遍历此列表并查询它们,看看它们是否符合我的条件。
我尝试下载整个节点并检查客户端,但是如果节点增长并下载大量不必要的数据,这将变得非常缓慢。
我尝试绕过查询循环,并在列表中的键上发送多个查询。如果我不满足我的原始条件,这会起作用,但是随着我尝试以不同的条件回到起点,变得越来越复杂。
for (int i = 0; i < nextUp.size(); i++) {
Query query = myRef.child(nextUp.get(i).toString());
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
boolean v = false;
for (DataSnapshot likesSnapshot : dataSnapshot.getChildren()) {
if (uid.equals(likesSnapshot.getKey())) {
v = true;
} else {
}
//b if for second pass with different conditions
if (b) {
if (!v) {
complieList(dataSnapshot.getKey(), b);
}
if (!b) {
complieList(dataSnapshot.getKey(), b);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
到我的代码回到开头时,所有查询尚未完成。因此,我需要等待所有操作完成才能继续。但这需要等待许多查询的结果,因此我不能简单地将其放在onDataChange中。我已经看到JavaScript承诺可以在管道中一次发送多个查询并接收所有查询的结果。有没有办法在Java中做到这一点。
更新
这里是我想要做什么的链接,但这是针对javascript的 Querying By Multiple Keys in Firebase
答案 0 :(得分:0)
您考虑使用交易吗?
事务用于复合服务器数据库请求和请求一次。
它还用于防止在db请求期间更改数据。
顺便说一句,实时数据库不支持复杂查询
您只能使用orderbychild ..等
但是您可以在保存数据时分别存储数据。