Consulta en Firebase por hijo de hijo
Tengo una estructura de objetos en Firebase que se ve así:
-KBP27k4iOTT2m873xSE
categories
Geography: true
Oceania: true
correctanswer: "Yaren (de facto)"
languages: "English"
question: "Nauru"
questiontype: "Text"
wronganswer1: "Majuro"
wronganswer2: "Mata-Utu"
wronganswer3: "Suva"
Estoy tratando de encontrar objetos por categorías, así que, por ejemplo, quiero todos los objetos que tengan la categoría establecida en "Oceanía".
Estoy usando Swift y realmente no puedo entender el concepto de cómo consultar los datos.
Mi consulta ahora se ve así:
ref.queryEqualToValue("", childKey: "categories").queryOrderedByChild("Oceania")
Dónderef
es la referencia a Firebase en esa ruta específica.
Sin embargo, sea lo que sea lo que he intentado, recibo TODOS los datos devueltos en lugar de los objetos con la categoría Oceanía solamente.
Mis datos están estructurados así:baseurl/questions/
Como puede ver en el ejemplo del objeto, una pregunta puede tener múltiples categorías agregadas, por lo que, según he entendido, es mejor tener una referencia a las categorías dentro de sus objetos.
Podría cambiar mi estructura abaseurl/questions/oceania/uniqueids/
, pero luego obtendría múltiples entradas que cubren los mismos datos, pero con diferentesuniqueid
, porque la pregunta estaría presente en ambas categoríasoceania
ygeography
.
Al usar la estructurabaseurl/questions/oceania/
ybaseurl/questions/geography
También podría simplemente agregarunique ids
debajooceania
ygeography
que apunta a un específicounique id
dentrobaseurl/questions/uniqueids
en cambio, pero eso significaría que tendría que hacer un seguimiento de muchas referencias. Hacer una mesa de relaciones, por así decirlo.
Me pregunto si ese es el camino a seguir o? ¿Debo reestructurar mis datos? La aplicación aún no está en producción, por lo que es posible reestructurar los datos por completo sin mayores consecuencias, aparte de que tendría que volver a escribir mi código, que empuja los datos a Firebase.
Avíseme, si todo esto no tiene sentido y lo siento por el muro de texto :-)