2017-04-13 42 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的建議。