Как отфильтровать данные из firebase? - PullRequest
0 голосов
/ 08 мая 2020
BasicData {
userid:123123,
 email:something@gmail.com
 },
BusData {
Dropping: ....,
Boarding:......,
.....
 ......
 },
Traveller1 {
 name:....,
 seatno0.....,
 age:....,
 },
 Traveller2 {
 name:....,
 seatno0.....,
 age:....,

  },
 Traveller3 {
 name:....,
 seatno0.....,
age:....,
},
Traveller4 {
name:....,
seatno0.....,
age:....,

 }

В BookedBusdata есть таблица, содержащая BasicData BusData и TravellerData. Я хочу получить доступ к данным, состоящим только из путешественников, но это может быть путешественников 2, 4, 10, любое число. Документы состоят только из карты. Но я хочу получить все данные Traveler, которые имеют форму Traveller1, Traveller2, независимо от того, есть ли там Traveler

   var docRef = db.collection("BookedTicketData").doc(orderid);
  docRef.get().then(function(doc) {
  if (doc.exists) {
     data = doc.data()
        console.log(data.Traveller1.Age) // I am getting the data if i am  accessing only one
  } else {
  // console.log("No such document!");
 }
  }).catch(function(error) {
     console.log("Error getting document:", error);
  });

Этот код я выполнил

1 Ответ

2 голосов
/ 08 мая 2020

Если вам нравится фильтровать данные на стороне клиента, это довольно простая задача

const data = {
  BasicData: {},
  BusData: {},
  Traveller1: {
    name: 'Name1',
    email: 'Email1'
  },
  Traveller2: {
    name: 'Name2',
    email: 'Email2'
  },
  Traveller3: {
    name: 'Name2',
    email: 'Email2'
  },
}

// returns an array of travelers
console.log(Object.keys(data).reduce((acc, key) => {
  if (key.includes('Traveller')) {
    acc.push(data[key])
  }
  return acc;
}, []))

// returns an object of travelers
console.log(Object.keys(data).reduce((acc, key) => {
  if (key.includes('Traveller')) {
    acc[key] = data[key];
  }
  return acc;
}, {}))

В вашем случае вы можете просто использовать Object.keys(doc.data()).reduce...

...