Сложная модель данных для Firestore
Я создаю свое первое приложение с помощью Firestore + angularfire, и определить модель данных довольно сложно из-за отсутствия у меня опыта работы с Firestore. Мне нужна ваша помощь.
У меня есть следующие сущности и зависимости.
- Рестораны: они независимы и могут быть зарегистрированы пользователями приложения.
- Пользователь, который создает ресторан, становится "владельцем". Он / она может приглашать других пользователей быть "официантами / официантками" ресторана.
- Пользователи могут получить приглашение "быть моим официантом / официанткой" в одном или нескольких ресторанах (возможно, от разных владельцев).
- У нас есть еще один объект "Клиенты". Записи этой организации содержат данные о заказанных блюдах и напитках, цене, советах и т. Д.
А потом следующие правила
- Каждый владелец может видеть любые данные "Клиента" в своих ресторанах, но не в других ресторанах.
- Каждый "официант / официантка" может видеть данные клиентов, которых он / она обслуживал (в любом ресторане), но не других клиентов.
Итак, как вы можете видеть, существует несколько зависимостей, в том числе несколько условий ИЛИ, которые не поддерживаются фильтрами "где" в Firestore. Поэтому я не уверен, должен ли я вкладывать коллекцию клиентов в каждый документ ресторана или мне нужно, чтобы все клиенты были в корневой коллекции, а затем фильтровать их.
Не могли бы вы помочь мне с этим и дать некоторые идеи о том, как вы думаете, это лучший способ управлять этим с правилами Firestore?
1 ответ
Это предложение, основанное на том, что вы сказали:
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, когда вы пытаетесь фильтровать и сортировать вместе...
В этом случае вы можете задать любые вопросы, например, клиенты в ресторане, официанты одного ресторана или рестораны официанта. Как это:
customersRef.where("restaurants." + idRestaurant, '>', 0).orderBy("restaurants." + idRestaurant);
Надеюсь это поможет!