Android 使用多个键搜索和更新firebase

Android 使用多个键搜索和更新firebase,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有这样的firebase(我不能改变桌子的设计) 储存在消防基地 我将使用visitorLocation和visitorId进行搜索,然后更改启用的值 我现在所拥有的: DatabaseReference ref = FirebaseDatabase.getInstance().getReference("visitores"); //This is good, Returns the 4 nodes. Query q = ref.orderByChild("vi

我有这样的firebase(我不能改变桌子的设计)

储存在消防基地

我将使用visitorLocation和visitorId进行搜索,然后更改启用的值

我现在所拥有的:

 DatabaseReference ref = 

FirebaseDatabase.getInstance().getReference("visitores");
//This is good, Returns the 4 nodes.
            Query q = ref.orderByChild("visitorId").equalTo("22");


            q.orderByChild("visitorLocation").equalTo("01").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    dataSnapshot.getChildren().iterator().next().getKey();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
但后来我发现了一个错误:您不能合并多个orderBy调用! 有人能帮忙吗?如何按多个键值进行搜索

谢谢你

不能同时使用“visitorLocation=04&&visitorId=22”,但可以通过组合这两个字段(如“visitorLocation\u visitoId=04\u 22”)来修改表结构
要做到这一点,您需要在firebase数据库表结构中添加一个字段,这样您就可以很好地应用该字段并进行查询

,正如我看到的,您要求同时发生两件不能同时完成的事情。例如,你不能要求人类同时接受“男性”和“女性”的命令。那根本不是什么命令。也许您希望查询的子列表包含某些表达式?例如,为什么我想更新where visitorLocation=04&&visitorId=22->将enabled设置为true?看起来您并不是在寻找一个
order
函数调用来实现这一点。你点的菜对你来说似乎无关紧要。但是我会让其他更经常使用数据库的人加入进来,因为我不经常使用数据库。您可以循环第一个查询,并使用类似于
if(q->get(visitorId)==22){//Do something with q->get('name')}
。Firebase数据库查询只能对单个属性进行排序/筛选。在许多情况下,可以将要筛选的值组合到单个(合成)特性中。例如
“visitorId\uuu访问者位置”:“22\u01”
。有关此方法和其他方法的详细示例,请参见我的回答:
 DatabaseReference ref = 

FirebaseDatabase.getInstance().getReference("visitores");
//This is good, Returns the 4 nodes.
            Query q = ref.orderByChild("visitorId").equalTo("22");


            q.orderByChild("visitorLocation").equalTo("01").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    dataSnapshot.getChildren().iterator().next().getKey();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });