Android Firebase查询内部列表的元素

时间:2017-04-13 11:38:52

标签: android json firebase firebase-realtime-database

我有一个兴趣的JSON结构,其中有一个用户列表,如下所示:

{
  "-k1234" : {
    "name" : "Biking",
    "users" : {
      "jX0XxPWKUScLBkCRfpoRNJG0n3P2" : true
    }
  },
  "-k1235" : {
    "name" : "Cooking",
    "users" : {
      "5Y17UfNRWxR6mx8j6MWKQQbTTWE3" : true,
      "jX0XxPWKUScLBkCRfpoRNJG0n3P2" : true
    }
  },
  "-k1236" : {
    "name" : "Walking",
    "users" : {
      "5Y17UfNRWxR6mx8j6MWKQQbTTWE3" : true,
      "PKozrktlSaPPLZ2FRxHOP7JkZdO2" : true
    }
  },
  "-k1237" : {
    "name" : "Yoga",
    "users" : {
      "5Y17UfNRWxR6mx8j6MWKQQbTTWE3" : true,
      "jX0XxPWKUScLBkCRfpoRNJG0n3P2" : true
    }
  },
  "-k1238" : {
    "name" : "Reading",
    "users" : {
      "5Y17UfNRWxR6mx8j6MWKQQbTTWE3" : true,
      "jX0XxPWKUScLBkCRfpoRNJG0n3P2" : true
    }
  }
}

每个用户都有一个感兴趣的部分,如下所示:

{
  "-5Y17UfNRWxR6mx8j6MWKQQbTTWE3" : {
    "interests" : {
      "-k1235" : true,
      "-k1236" : true,
      "-k1237" : true,
      "-k1238" : true
    }
  }
}

如果我根据名称进行过滤很简单:

Query query = databaseReference.child(INTERESTS).orderByChild("name").equalTo("Biking");

但我不知道如何进行查询,因为没有为给定用户选择过滤器,例如如果用户为"5Y17UfNRWxR6mx8j6MWKQQbTTWE3",则查询应返回带有“骑自行车”元素的datasnapshot对象

"-k1234" : {
    "name" : "Biking",
    "users" : {
      "jX0XxPWKUScLBkCRfpoRNJG0n3P2" : true
    }

有没有办法做到这一点?或者我应该更改JSON数据模型吗?

2 个答案:

答案 0 :(得分:0)

是的,可以这样做。首先,您需要为每个用户创建一个名为INTERESTS的新部分。在本节中将需要添加所有兴趣。您将以users中对INTERESTS所做的相同方式实现此目标。让我们对jX0XxPWKUScLBkCRfpoRNJG0n3P2用户说"Biking": true"Yoga": true"Cooking": false。通过这种方式,您可以过滤每个用户的兴趣或非兴趣。希望它有所帮助。

答案 1 :(得分:0)

我认为你能做的最好,如果你想让这个逻辑成为服务器端(以及在客户端加载负载)就是创建一个firebase函数来完成@ 5246885所建议的。