Sto seguendo la raccomandazione di Firebase di appiattire i dati, ma ho difficoltà ad elencare una serie di elementi dal mio database.Query chiavi multiple su Firebase
Ecco un esempio del mio file di database:
"users" : {
"UID12349USER" : {
"firstName" : "Jon",
"lastName" : "Snow",
"email" : "[email protected]",
"albums" : {
"UID124ALBUM" : true,
"UID125ALBUM" : true
}
}
},
"albums" : {
"UID124ALBUM" : {
"name" : "My Artwork",
},
"UID125ALBUM" : {
"name" : "My Sketches",
}
}
sto recuperando l'elenco degli album per un determinato utente:
let userAlbums = database.child(usersKey).child(user.uid).child(albumsKey)
userAlbums.observeSingleEventOfType(.Value, withBlock: { snapshot in
// fetch [UID124ALBUM: 1, UID125ALBUM: 1]
})
Ora Vorrei poter recuperare tutti gli album degli utenti in una sola query. ho potuto fare una partita di query, e compilare una matrice asincrona, ma che non sembra un buon approccio per me ...
for key in albumKeys {
let album = database.child(self.albumsKey).child(key)
album.observeSingleEventOfType(.Value, withBlock: { snapshot in
// fetch album.. append to array
})
}
Utilizzando questo approccio rende difficile da rilevare quando le query hanno finito , a causa della natura asincrona delle richieste. Aggiungete a ciò il fatto che alcune richieste potrebbero non riuscire, a causa di una cattiva connessione.
Inoltre, se voglio filtrare uno degli album con un nome specifico (ad esempio "My Artwork") o restituire nil se non esiste, ho anche una fine difficile.
var found = false
for key in albumKeys {
let album = database.child(self.albumsKey).child(key)
album.observeSingleEventOfType(.Value, withBlock: { snapshot in
// if current.name == "My Artwork"
// completion(current)
})
}
// This block will be called before observeSingleEventOfType =.=
if !found {
completion(nil)
}
Ho un buon background su iOS e Swift, ma sono a conoscenza dei database Firebase e NoSQL. Qualcuno può indicarmi una buona direzione? Devo buttare Firebase e provare qualcos'altro? Mi manca qualche metodo in grado di interrogare ciò di cui ho bisogno? La mia struttura JSON è sbagliata e mancano alcune chiavi extra?
Grazie
"Aggiungete a ciò il fatto che alcune delle richieste potrebbe fallire, a causa di una cattiva connessione" tutte le richieste di andare oltre la stessa connessione, che viene mantenuto automaticamente dal Firebase SDK. Per ulteriori informazioni, consultare http: // StackOverflow.it/questions/35931526/speed-up-fetching-posts-per-my-social-network-app-di-utilizzo-query-invece-di-obse/35932786 # 35932786 –
Questo è bello, almeno una cosa non è una preoccupazione. Tuttavia, non cambia il fatto che ci deve essere un modo migliore per filtrare i dati. Dato l'esempio di Firebase per le chat di gruppo, nelle Guide, in cui un utente può far parte di più chat room e una chat room può avere più membri. Come si ottiene (elenca) tutte le chat room per un dato utente, dal momento che tutto ciò che si ha nell'oggetto utente è un elenco di id della chat? Grazie –
Normalmente manterrai gli indici in entrambi i gruppi e utenti. Quindi per ogni gruppo, si mantiene un elenco degli utenti in quel gruppo. E per ogni utente, tieni un elenco dei gruppi in cui si trovano. Vedi https://firebase.google.com/docs/database/ios/structure-data#fanout –