2017-04-13 46 views
0

一个列表中的元素我有利益 JSON结构与谁选择了它这样的用户列表:Android的火力地堡查询在里面

{ 
    "-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

是的,有可能做到这一点。首先,您需要为每个用户创建一个名为INTERESTS的新部分。在这部分将需要添加所有的兴趣。您将以INTERESTS中的users相同的方式达到此目的。比方说jX0XxPWKUScLBkCRfpoRNJG0n3P2用户,您将拥有"Biking": true,"Yoga": true,"Cooking": false。通过这种方式,您可以过滤每个用户的兴趣或非兴趣。希望能帮助到你。

+0

每个用户都有一个感兴趣的部分。我更新了问题,但我不知道如何进行查询本身。 –

+0

要知道哪些interestes未被选中,您需要找到那些具有“false”值的兴趣。只需将'reference'放在所需的用户上,像这样:'databaseReference.child(USERS).child(userId).child(interest);'并添加一个'addChildEventListener'来查看哪些兴趣被设置为'false'。 –

+0

我正在构建像文档参考中的数据:[l​​ink](https://firebase.google.com/docs/database/android/structure-data#fanout)对于给定的键引用(对于用户或兴趣)该值总是“真”,在另一种情况下该密钥不存在。所以我不能把兴趣设置为“虚假”。在您的解决方案中,您在接收到响应时进行筛选,并试图了解是否可以在服务器端进行筛选。 –

0

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