我有一个类别列表,应该在前端以某种方式对其进行排序。此外,该类别中的商品也应订购。
想象一下,一家餐馆提供多种食物:晚餐,甜点,鸡尾酒 每个类别都包含多个项目。
在前端,我想按照可以手动设置的特定顺序显示类别和项目。但是,我不确定该用例需要使用哪种数据类型和结构。
它可能看起来像这样:
------------------ FANCY RESTAURANT -----------------
--------- Dinner (Order 1, shown first) ------------
Dinner 1
Dinner 2
--------- Dessert (Order 2, shown second) ----------
Dessert 1
Dessert 2
Dessert 3
--------- Cocktails (Order 3, shown third) -----------
Cocktail 1
......
我的想法是这样的:
restaurants (collection)
- name, id, etc.
- array of categories
* map with: category_name, array of menuItems
- subcollection (menuItems)
在这种情况下,menuItems数组将只是具有该类别中项目ID的数组。使用数组索引可以进行排序。
这可以通过某种方式加以改进吗?这样做有一个缺点,那就是在前端,我实际上需要遍历menuItems数组中的每个id,并且必须将它们与存储在子集合中的实际menuItem相匹配。我觉得使用非规范化的数据可能会更简单,但我不确定。
答案 0 :(得分:1)
根据您的评论:
获取所有餐厅的列表,获取单个餐厅的信息,获取餐厅的所有menuItems的信息,获取所有未分类的menuItems的列表(例如:甜点:[menuItem1,menuItem2],晚餐:[menuItem3,menuItem4])< / p>
可能的数据库模式可能是:
Firestore-root
|
--- restaurants (collection)
|
--- restarantId (document)
|
--- name: "Fancy Restaurant"
|
--- menuItems (subcollection)
|
--- menuItemId (document)
|
--- name: "Pizza"
|
--- category: "dinner"
要获取所有餐厅,您需要使用以下馆藏参考:
rootRef.collection("restaurants");
如果您需要一家餐厅,则需要使用以下文档参考:
rootRef.collection("restaurants").document(restarantId);
如果需要获取餐厅的所有菜单项,则需要使用以下馆藏参考:
rootRef.collection("restaurants").document(restarantId).collection("menuItems");
如果您需要按类别获取餐厅的所有菜单项,则需要使用以下查询:
rootRef.collection("restaurants").document(restarantId)
.collection("menuItems").whereEqualTo("category", "dinner");
由于您未指定要使用的编程语言,因此我提供了Android的代码,但在我看来,其他编程语言也是如此。