He configurado una base de datos de Firebase como esta:
food (collection) - 10/19/2021 (document) - Breakfast (collection) - Food Item 1 (document) - Lunch (collection) - Food Item 1 (document) - Dinner (collection) - Food Item 1 (document) - 10/20/2021 (document) - Breakfast (collection) - Food Item 1 (document) - Lunch (collection) - Food Item 1 (document) - Dinner (collection) - Food Item 1 (document) Ahora quiero consultar todos los alimentos que coincidan con ciertos criterios, es decir, FoodItem.calories < 500 .
¿Cómo debo configurar esta consulta?
Quería usar una consulta de grupo de Colección, pero esto solo parece funcionar para 1 comida: por ejemplo, desayuno, almuerzo o cena, pero no los tres.
¿Debo configurar 3 consultas, 1 por comida y luego fusionar los resultados, o hay una forma más limpia?
const breakfast = query(collectionGroup(db, 'breakfast'), where('calories', '<=', '100')); const querySnapshot = await getDocs(breakfast);Las consultas de grupos de colecciones funcionan en todas las colecciones con un nombre dado. Dado que ha nombrado sus colecciones según la comida que cubren, no puede usar una sola consulta de grupo de colección para leer todas las comidas.
La solución común es usar un solo nombre para todas estas colecciones (por ejemplo meal ) y luego almacenar el tipo de comida (por ejemplo, Breakfast ) en el documento principal de los alimentos en esa comida.
La alternativa es realizar una consulta de grupo de recopilación por separado para cada tipo de comida (por ejemplo, Breakfast ) y combinar los resultados en el código de su aplicación.