Как запросить ссылки с помощью angularfire? - PullRequest
0 голосов
/ 11 мая 2019

plans - корневая коллекция с 2 полями: date и recipe. recipe является ссылкой на другую корневую коллекцию под названием recipes. Я пытаюсь построить наблюдаемую цепочку, которая испускает рецепты, на которые ссылаются планы на указанный диапазон дат.

lookup(range: MealPlanRange): Observable<Recipe[]> {
    return this.db.collection('plans', ref=>ref
    .where('date', ">=", range.startDate )
    .where('date', "<=", range.endDate )
    ).valueChanges().pipe(
      // at this point, i have the plans i want, 
      //  but i don't know how to get the recipes
      switchMap(ps=>(/*how to get observable of recipes?*/)),
    );
  }

Я пытался this.db.doc(p[0].recipe), но это не возвращает наблюдаемого. Я посмотрел на создание запроса, который указал несколько идентификаторов, но это не представляется возможным. Есть предложения?

1 Ответ

0 голосов
/ 11 мая 2019

Нашли:

lookup(range: MealPlanRange): Observable<Meal[]> {
    return this.db.collection('plans', ref => ref
      .where('date', ">=", range.startDate)
      .where('date', "<=", range.endDate)
    ).valueChanges().pipe(
      switchMap(ps => {
        // return empty array when no plans
        if(ps.length === 0) {
           return of([])
        }
        // for each plan, do a doc lookup and use valueChanges() to get observable of changes
        const recipes = ps.map(p => this.db.doc(p.recipe).valueChanges());
        // use combineLatest to get back into an array of recipes, 
        // any change to any recipe will re-emit
        return combineLatest(...recipes);
      }),
    ) as any;
  }
...