Angular Cloud Firestore получает данные на основе вошедшего в систему пользователя

У меня есть firestore, который будет выглядеть так: Cloud Firestore

Итак, в двух словах у меня есть несколько пользователей, которые могут войти в мое приложение и создать рецепт. А на странице «Мой рецепт» у меня будет список рецептов, которые есть у пользователя. Итак, у меня есть 1 коллекция «Пользователь» и внутри этой 1 коллекции «Рецепты» с несколькими рецептами.

Я реализовал вход в Firestore Google, и он работает, когда я получаю uid. и т.д ... Это внутри auth.service.ts:

auth.service.ts

и я хочу создать recipes.service.ts с помощью метода getRecipes (), который будет getRecipes в разделе users / $ (user.uid) / Recipes

кто-нибудь может здесь помочь? Я не нашел никаких руководств по отображению данных с подколлекцией.


person Rudy F    schedule 19.04.2020    source источник
comment
В Stack Overflow не делитесь изображениями кода. Вы должны скопировать код в сам вопрос и отформатировать его так, чтобы его было легко читать, копировать и искать. Прочтите: stackoverflow.com/help/how-to-ask   -  person Doug Stevenson    schedule 19.04.2020


Ответы (1)


Добро пожаловать в Stackoverflow!

Чтобы получить данные из коллекций с вложенной коллекцией, вы можете легко вернуть ее, используя код, подобный этому: db.collection('users').doc('<user>').collection('Recipes').get(). Используя это, он вернет документ с вложенной коллекцией для каждого пользователя.

Однако невозможно собрать подколлекции вместе со всеми документами сразу. Но есть хороший обходной путь здесь, в вашем случае это будет примерно так:

this.firestoreService.colWithIds$('users').pipe(
 switchMap((users: any[]) => { 
   const us = users.map((r: any) => { 
     return this.firestoreService
       .col$(`users/${r.id}/recipes`)
       .pipe(
         map(recipes => Object.assign(user, {recipes}))
       ); 
     }); 
   return combineLatest(...us); 
 })
).subscribe(users => console.log(users);

Хотя я не тестировал этот код, я считаю, что это хорошая отправная точка для вас, поскольку этот код получает users значения, сопоставленные с наблюдаемыми подгруппами. Однако эти Recipes значения отображаются обратно в user значения, а данные подгруппы Recipes содержатся в качестве нового свойства.

Сообщите мне, помогла ли вам информация!

person gso_gabriel    schedule 20.04.2020
comment
Привет, @RudyF, пожалуйста, подумайте о том, чтобы проголосовать за или принять этот ответ, если он так или иначе помог вам решить вашу проблему. - person gso_gabriel; 27.04.2020