Firestore的复杂数据模型

时间:2018-01-25 22:07:42

标签: firebase data-modeling google-cloud-firestore

我正在使用Firestore + angularfire构建我的第一个应用程序,由于我缺乏Firestore的经验,因此很难定义数据模型。我需要你的帮助。

我有以下实体和依赖项

  1. 餐馆:他们是独立的,可以由应用程序的用户注册。
  2. 创建餐厅的用户成为"所有者"。他/她可以邀请其他用户成为"服务员/女服务员"餐厅。
  3. 用户可以收到一个"是我的服务员/女服务员"来自一家或多家餐厅(可能来自不同的所有者)的邀请。
  4. 我们有另一个"客户"的实体。该实体的参赛作品有关于订购的菜肴和饮料,价格,小费等的数据......
  5. 然后是以下规则

    1. 每个所有者都可以看到任何"客户"他/她的餐馆内的数据,但其他餐馆没有。
    2. 每个"服务员/女服务员"可以查看他/她所服务的客户(在任何餐厅)的数据,但不能看到其他客户的数据。
    3. 因为你可以看到有多个依赖关系,包括几个OR条件,它们不会被"其中" Firestore中的过滤器。因此,我不确定是否应该将客户集合嵌入到每个餐馆文档中,或者我是否应该将所有客户都放在根集合中,然后对其进行过滤。

      请您帮我解决这个问题,并提供一些关于您认为如何使用Firestore规则管理它的最佳方法的想法?

1 个答案:

答案 0 :(得分:3)

这是基于你所说的消息:

Restaurants
    [id] (document)
        owner: idUser(Owner)
        waiters (map)
            idUser1: timestamp
            idUser2: timestamp
            idUser3: timestamp
        customersIn (collection)
            [idCustomer1] 
                itens: (map)
                    french fries: 10
                    water: 3
            [idCustomer2]
                itens: (map)
                    hot dog: 6
                    soda: 4
Customers
    [id] (document)
        name
        restaurants (map)
            idRestaurant1: timestamp
            idRestaurant2: timestamp
Users
    [id] (document)
        waiterIn (map)
            idRestaurant1: timestamp
            idRestaurant2: timestamp

当您尝试过滤并排序时,https://firebase.google.com/docs/firestore/solutions/arrays会对此aproach进行评论...

在这种情况下,您可以提出任何疑问,例如餐厅的客户,一家餐馆的服务员或服务员的餐厅。 像这样:

customersRef.where("restaurants." + idRestaurant, '>', 0).orderBy("restaurants." + idRestaurant);

希望这有帮助!