У меня есть JSON структуры вроде следующего:Firebase в Swift вложенный запрос не работает должным образом
{
"groups" : {
"-KAv867tzVgIghmr15CM" : {
"author" : "ruben",
"name" : "Item A"
},
"-KAv87nqLEG1Jtc04Ebn" : {
"author" : "ruben",
"name" : "Item B"
},
"-KAv88yZe8KTfkjAE7In" : {
"author" : "ruben",
"name" : "Item C"
}
},
"users" : {
"rsenov : {
"avatar" : "guest",
"email" : "[email protected]",
"groups" : {
"-KAv867tzVgIghmr15CM" : "true",
"-KAv87nqLEG1Jtc04Ebn" : "true",
"-KAv88yZe8KTfkjAE7In" : "true"
}
}
}
}
Каждый пользователь имеет элемент «группы» с ключом childByAutoId(). Затем у меня есть список всех групп, которые существуют в приложении.
Каждый раз, когда я запускаю приложение, я получаю текущую ссылку на URL-адрес пользователя, и я получаю список групп этого пользователя (в этом случае зарегистрированный пользователь «rsenov», который имеет 3 группы) , Для каждой группы, к которой принадлежит этот пользователь, я повторяю ссылку на URL-адреса групп, ища информацию об этих трех группах.
Я делаю это так:
func loadTable() {
self.groups = []
var counter = 0
self.meses = []
var tempItems = [String]()
DataService.dataService.CURRENT_USER_GROUPS_REF.observeEventType(.Value, withBlock: { snapshot in
if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] {
tempItems = []
for snap in snapshots {
DataService.dataService.GROUPS_REF.childByAppendingPath(snap.key).queryOrderedByChild("name").observeEventType(.Value, withBlock: { snapshot in
if let postDictionary = snapshot.value as? Dictionary<String, AnyObject> {
tempItems.append(snapshot.value.objectForKey("name") as! String)
let key = snapshot.key
let group = Group(key: key, dictionary: postDictionary)
self.groups.insert(group, atIndex: 0)
}
counter++
if (counter == snapshots.count) {
self.meses = tempItems
self.miTabla.reloadData()
}
})
}
}
})
}
Я думаю, что это не очень хорошая идея перебора таким образом. Например, если в URL GROUPS_REF есть изменение какого-либо дочернего элемента, код работает только в этом вложенном коде, и поскольку он не имеет значения «snap.key», полученного из цикла for, он не работает ,
Каков наилучший способ сделать хороший запрос в этом случае?
Извините, я сделал это уже.Не знал, что этот вариант доступен – Ruben
Вы правы, группы и пользователи - это два узла верхнего уровня – Ruben
Чтобы уточнить; когда пользователь входит в систему, вы хотите получить данные из каждой группы, к которой они принадлежат (group_id, author и name)? – Jay