我正在尝试实现一个Firestore云数据库,但我是NoSQL数据库的新手。我想知道将这些文件集整理成文件集/文档的最佳方式:我有家餐馆,它们有不同的食物和预订。将这些数据集组织到Firestore DB中的最佳方法是什么?这是正确的做法吗:
Restaurant1 (Collection) ----> Foods (document) ----> Reservations (document)
5f0d552i1#
我认为将Foods和Reservations存储为顶级集合最终会在以后为您带来更大的灵活性。取一个restaurantID并将其粘贴到这些集合中的每个文档中是很容易的,所以我个人认为您不应该将它们嵌套在“餐厅”集合中,这是处理大量嵌套集合的个人偏好。我认为最优的结构是:
Restaurants (collection) --- Name: Chipotle --- ID: restaurant1 --- Foods: [{ Name: foodItem1 }, { Name: foodItem2 }] Foods (collection) --- Name: foodItem1 --- Ingredients: abc --- Nutrition Facts: xyz Reservations (collection) --- User: user1 --- Restaurant: { id: restaurant1, name: Chipotle } --- Time: 3pm Users (collection) --- ID: user1
你会注意到这里有一些多余的信息。这是很好的,所以如果你请求所有的预订,你会得到餐厅的名称和ID等你可能想要的东西。你会发现你会想存储数据多次,这对我来说是一个很好的结构。使用此结构,您可以非常轻松地调用:All reservations by user X或All foods meeting nutrition limits of Y而不是使用collectionGroup查询,它会调用所有餐厅的预订子集合列表。您不会总是希望按餐厅查询预订,也许您希望按用户或时间等进行拉取。
All reservations by user X
All foods meeting nutrition limits of Y
mrphzbgm2#
根据您的评论:餐馆的管理人员应该能够在一个列表中看到他的预订以及来自其他客户的其他预订。并且每个客户也应该能够看到他的预订历史。我将尝试为您提供一个可以帮助您非常轻松地获取数据模式。
Firestore-rrot | --- users (collection) | | | --- uid (document) | | | | | --- type: "manager" | | | --- uid (document) | | | --- type: "client" | --- reservations (collection) | --- reservationIdOne (document) | | | --- reservedBy: "uid" | | | --- date: September 21, 2019 at 1:15:02 PM UTC+3 | --- reservationIdTwo (document) | --- reservedBy: "uid" | --- date: September 21, 2019 at 1:18:42 PM UTC+3
使用此结构描述,您可以简单地查询数据库,以取得所有使用者或特定使用者(管理员或客户端)。您也可以在reservations集合上加入指涉,以取得所有的保留。如果您只想取得单一类型(管理员或客户端)的保留,则应该使用如下所示的查询:
reservations
db.collection("reservations").whereEqual("type", "manager");
正如您所看到的,我还添加了一个date属性,以便您可以轻松地对它们进行降序排序(最后一个预订排在第一位)。
date
eagi6jfj3#
这实际上取决于您试图解决的用例,因为您应该针对这些模型上的特定查询进行优化。我建议观看这些视频,以获得更好的想法:
3条答案
按热度按时间5f0d552i1#
我认为将Foods和Reservations存储为顶级集合最终会在以后为您带来更大的灵活性。
取一个restaurantID并将其粘贴到这些集合中的每个文档中是很容易的,所以我个人认为您不应该将它们嵌套在“餐厅”集合中,这是处理大量嵌套集合的个人偏好。
我认为最优的结构是:
你会注意到这里有一些多余的信息。这是很好的,所以如果你请求所有的预订,你会得到餐厅的名称和ID等你可能想要的东西。你会发现你会想存储数据多次,这对我来说是一个很好的结构。
使用此结构,您可以非常轻松地调用:
All reservations by user X
或All foods meeting nutrition limits of Y
而不是使用collectionGroup查询,它会调用所有餐厅的预订子集合列表。您不会总是希望按餐厅查询预订,也许您希望按用户或时间等进行拉取。
mrphzbgm2#
根据您的评论:
餐馆的管理人员应该能够在一个列表中看到他的预订以及来自其他客户的其他预订。并且每个客户也应该能够看到他的预订历史。
我将尝试为您提供一个可以帮助您非常轻松地获取数据模式。
使用此结构描述,您可以简单地查询数据库,以取得所有使用者或特定使用者(管理员或客户端)。您也可以在
reservations
集合上加入指涉,以取得所有的保留。如果您只想取得单一类型(管理员或客户端)的保留,则应该使用如下所示的查询:正如您所看到的,我还添加了一个
date
属性,以便您可以轻松地对它们进行降序排序(最后一个预订排在第一位)。eagi6jfj3#
这实际上取决于您试图解决的用例,因为您应该针对这些模型上的特定查询进行优化。
我建议观看这些视频,以获得更好的想法: