Я думаю, что хранение Foods и Reservation в качестве коллекций высшего уровня в конечном итоге даст вам больше гибкости.
Достаточно просто взять restaurantID и вставить его в каждый документ в этих коллекциях, поэтому я не будуЯ не думаю, что вы должны вкладывать их в коллекцию Restaurants.Это личное предпочтение работать с большим количеством вложенных коллекций.
Я думаю, что оптимальная структура:
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
Что вы заметите, так это наличие некоторой избыточной информации.Это хорошо, так что если вы запросите все предварительные заказы, вы получите название ресторана, удостоверение личности и т. Д., Что вам, скорее всего, нужно.Вы обнаружите, что хотите хранить данные несколько раз, и для меня это выглядит как хорошая структура.
С этой структурой вы можете очень легко просто позвонить:
All reservations by user X
илиAll foods meeting nutrition limits of Y
Вместо запроса collectionGroup, который вызвал бы список резервирований для всех коллекций ресторанов.Вам не всегда захочется запрашивать ваши бронирования по ресторанам, может быть, вы хотите получить данные по пользователю или времени и т. Д.