Преобразовать FirestoreCollection в массив? - PullRequest
0 голосов
/ 25 мая 2018

У меня проблемы с преобразованием данных Firestore в массив для графика chart.js.

Получение данных из Firestore

fetchData(){

    //Get data
    this.updatesCollection = this.afs.collection(pathStats);

    this.updates = this.updatesCollection.valueChanges();
}

Создание диаграммы

createChart(){

this.chart = new Chart('canvas', {
  type: 'line',
  data: {
    labels: ['5/18/18', '5/19/18', '5/20/18', '5/21/18', '5/22/18', '5/23/18'],
    datasets: [{
      label: 'Filled',
      backgroundColor: 'gray',
      data: [4, 3, 5, 2, 6, 7],
      fill: true,
    }]
  },
    }
)

Я использую жестко закодированные значения [4, 3, 5, 2, 6, 7] прямо сейчас в качестве заполнителя для моих точек данных.Как мне использовать вместо этого значения, поступающие из Firestore?

Решение

Как упоминалось Охадом ниже:

let chartData;

this.updatesCollection.ref.get().then((querySnapshot) => {
    chartData = querySnapshot.docs.map(doc => doc.data());
}

Это дает вам массивс каждым документом в своем собственном индексе.Вы можете получить доступ к отдельным свойствам, как и любой другой объект (например, chartData[0].wheelCount).

1 Ответ

0 голосов
/ 25 мая 2018

Вызов this.updatesCollection.get() будет асинхронно возвращать объект querySnapshot.

A querySnapshot имеет свойство docs, представляющее собой массив, содержащий ноль или более documentSnapshot объектов.Данные в них могут быть извлечены с помощью метода .data().

Код для создания вашего массива может выглядеть следующим образом:

let chartData = this.updates.collection.get()
  .then(querySnapshot => {
    chartData = querySnapshot.docs.map(doc => doc.data())
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...