首页 > 解决方案 > 组合多个集合组查询

问题描述

我已经建立了一个这样的firebase数据库:

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)

我现在想查询符合特定条件的所有食品,即FoodItem.calories < 500.

我应该如何设置这个查询?

我想使用集合组查询,但这似乎只适用于一顿饭:例如早餐、午餐或晚餐,但不是全部三餐。

我应该设置 3 个查询,每餐 1 个,然后合并结果,还是有更清洁的方法?

const breakfast = query(collectionGroup(db, 'breakfast'), where('calories', '<=', '100'));
const querySnapshot = await getDocs(breakfast);

在此处输入图像描述 在此处输入图像描述

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


集合组查询适用于具有给定名称的所有集合。由于您已根据它们所涵盖的餐点命名您的集合,因此您不能使用单个集合组查询来读取所有餐点。

常见的解决方案是为所有这些集合使用一个名称(例如meal),然后将餐食的类型(例如Breakfast)存储在该餐食中食物项的父文档中。

另一种方法是对每种膳食类型(例如Breakfast)执行单独的集合组查询,并将结果合并到您的应用程序代码中。


推荐阅读