Как получить данные из нескольких коллекций одновременно в FireStore - PullRequest
0 голосов
/ 09 апреля 2020

Я начинаю изучать angular, и я создал проект angular, где у меня есть база данных пожарного депо, структурированная как:

users:
    --docs:
        --uid:String;
        --tickets:String[];<--this are the ticketid

tickets:
    --ticketid:
        --Eventid:String;

Events:
    --Eventid:
        --City:String;
        --Title:String;
        ...

, где пользователи, билеты и События являются коллекциями, и документы, ticketid и eventid являются документами, содержащими информацию.

Я хочу получить объект Event из базы данных:

Это код, который я пробовал до сих пор:

getEvents(){
return this.db.collection('users').doc(this.useruid).snapshotChanges().pipe(map(tickets=>{
      var data = tickets.payload.data() as usuario;
      this.arrayTickets = data.tickets;
      this.arrayTickets.forEach(element => {
        this.db.collection('tickets').doc(element).snapshotChanges().pipe(map(ticket=>{
          var eventId = ticket.payload.get('eventid');
          this.db.collection('events').doc(eventoId).snapshotChanges().pipe(map(event=>{
            var element = event.payload.data() as event;
            this.events.push(element);
          }))
        }))

      });
      return(this.events);
    }))

}

, где this.events:event[]. Я думаю, что это не работает, потому что это асинхронно. Я попробовал другой способ, убрав моментальные снимки, чтобы они не обновлялись постоянно:

return this.db.firestore.collection('usuarios').doc(this.useruid).get().then(snapshot =>{
  var data = snapshot.data() as usuario;
  var eventosid: string[]=[];
  data.tickets.forEach(element => {
    this.db.firestore.collection('tickets').doc(element).get().then(snapshot=>{
      var data2 = snapshot.data() as ticket;
      eventosid.push(data2.eventoid);
    })
  });
  return eventosid;

, но это не работает ... Большое спасибо за ваше внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...