Как извлечь данные из хранилища по ссылочному значению в ключе - PullRequest
0 голосов
/ 06 февраля 2019

enter image description here

вот несколько документов для предложения, и каждое предложение может содержать bidderId, который ссылается на коллекцию пользователей и идентификатор пользователя.

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

Я использую angularfire и вот мой код.

this.liveOffers=this.db.collection("offers",ref => ref.where('offerExpired', '==', 0).where('isStart', '==', 1)).snapshotChanges().pipe(
map(actions => actions.map(a => {
  const data={} = a.payload.doc.data() as offer;
  const id = a.payload.doc.id;
  var bidder=this.db.doc(data.bidderId).snapshotChanges().subscribe(key=>{
    console.log(key.payload.data());
  });
  return { id, ...data,bidder };
}))   );

Здесь console.log (key.payload.data ());регистрирует данные для пользователя, но не может связать их с переменной bidder, и я не могу использовать объект пользователя в интерфейсе пользователя.

Пожалуйста, дайте мне знать, как я могу получить запись предложения с информацией о пользователе.

1 Ответ

0 голосов
/ 06 февраля 2019

Вам нужно использовать комбинацию switchMap и combineLatest, чтобы сделать это.

Это подход с псевдокодом

const temp = []
this.offers$ = this.db.collection().snapshotChanges().pipe(
  map(auctions=>{
    //we save all auctions in temp and return just the bidderId 

    return auctions.map(auction=>{
      const data={} = a.payload.doc.data() as offer;
      const id = a.payload.doc.id;
      temp.push({id, ...data})
      return data.bidderId
    })


  }),
  switchMap(bidderIds=>{
    // here you'll have all bidderIds and you need to return the array to query 
    // them to firebase
    return combineLatest(bidderIds.map(bidderId=> return this.db.doc(bidderId)))
  }),
  map(bidders=>{
    // here you'll get all bisders you'll have to set the bidder on each temp obj 
    // you saved previously
  })
)

Убедитесь, что вы import { combineLatest } from 'rxjs/operators' не 'rxjs'

...