我有一个兴趣的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数据模型吗?
答案 0 :(得分:0)
是的,可以这样做。首先,您需要为每个用户创建一个名为INTERESTS
的新部分。在本节中将需要添加所有兴趣。您将以users
中对INTERESTS
所做的相同方式实现此目标。让我们对jX0XxPWKUScLBkCRfpoRNJG0n3P2
用户说"Biking": true
,"Yoga": true
,"Cooking": false
。通过这种方式,您可以过滤每个用户的兴趣或非兴趣。希望它有所帮助。
答案 1 :(得分:0)
我认为你能做的最好,如果你想让这个逻辑成为服务器端(以及在客户端加载负载)就是创建一个firebase函数来完成@ 5246885所建议的。