Poniżej znajduje się moja baza firebase i kod, chciałbym odzyskać wszystkie działania, które mają klucz użytkownika John w User.
let ref = FIRDatabase.database().reference().child("activities/")
ref.queryOrderedByChild("User").queryEqualToValue("John").observeSingleEventOfType(.Value,
withBlock:{
(snapshot) in
for record in snapshot.children
{
}
})
Odpowiedzi:
0 dla odpowiedzi № 1To nie działa, ponieważ w zapytaniu próbujesz wziąć wszystkie działania mające atrybut User == "John"
gdy prawdziwą wartością użytkownika jest obiekt taki:
{
"John": {
"age": 21
}
}
Aby rozwiązać ten problem, należy zmienić strukturę danych, tworząc węzeł, w którym zapisuje się wszystkich użytkowników i pozostaje w nim users/userID/activities
tylko identyfikator działań. Na przykład byłby to lepszy sposób na uporządkowanie danych:
{
"activities": {
"cycling": {
"users": {
"user1": true,
"user2": true
}
},
"running": {
"users": {
"user1": true
}
}
},
"users": {
"user1": {
"name": "John",
"age": 21,
"activities": {
"cycling": true,
"running": true,
}
},
"user2": {
"name": "Tim",
"age": 20,
"activities": {
"cycling": true
}
}
}
}
Następnie możesz użyć Daj mi znać, czy to pomogło;)