Si vous vous trouvez besoin des requêtes complexes, le plus probable signifie que vos données ne sont pas correctement structuré. Dans votre cas, votre structure doit être normalisée (aplatie).
La modification suivante doit rendre vos requêtes plus simples:
{
"listings": {
"listing_key_1": {
"timestamp": "2017 10 19 07:49:38"
},
"listing_key_2": {
"timestamp": "2017 10 19 05:30:02"
},
...
},
"AircraftHouseRules": {
"listing_key_1": {
"Availability": "",
...
},
"listing_key_2": {
"Availability": "",
...
}
},
"BasicInfo": {
"listing_key_1": {
"ModelPlane": "",
...
},
"listing_key_2": {
"ModelPlane": "",
...
}
},
...
}
Je ne comprends pas ce que vous entendez par « tirer les demandes ». Si vous voulez dire observer ou simplement lire les données, c'est assez simple. Tout ce dont vous avez besoin dans votre cas est un ID/clé listing
pour accéder directement à ses données (AircraftHouseRules
, BasicInfo
, DetailedInformation
, etc ...).
Si vous voulez que l'inverse (pour obtenir la clé d'une liste par, disons, son TypeOfPlane
), vous pouvez faire la requête suivante
// NOTE: Untested code - just for illustrative purposes
let queryRef = Database().database.reference.child("BasicInfo").queryOrdered(byChild: "TypeOfPlane").queryEqual(to: "some type")
queryRef.observeSingleEvent(of: .value, with { snapshot in
if let listings = snapshot.value as? [String : Any] {
// all retrieved listings with TypeOfPlane == "some type"
}
})
Conseils
Vous devriez toujours avoid nesting structures pour éviter de télécharger des données inutiles et d'entraver les performances. Dans la capture d'écran que vous avez affichée, vous avez jusqu'à 8 niveaux de données imbriquées. Avec la modification ci-dessus, vous pouvez facilement réduire ces niveaux de moitié.
Vous devez également envisager de remplacer toutes les structures matricielles (telles que celles sous ImageRef
) par des paires valeur/clé sous la forme arrays can be evil.
Merci pour les recommandations. Je vais faire des changements. – Cari95