Запрос 3 коллекции из пожарного магазина - PullRequest
0 голосов
/ 19 сентября 2018

Я использую объект «Documento» для хранения данных в firestore, а затем, когда я получаю эти данные, я сохраняю их в структуре JSON.Теперь моя проблема в том, что теперь у меня есть три запроса.Один - это график, другой - доктор, а другой - его тип.Все три из них хранятся в разных запросах, теперь в моем расписании должно быть имя доктора из коллекции врачей и его тип, который находится в моей третьей коллекции.

Поэтому я хотел бы знать, как запросить их вместе и объединить в один объект, чтобы я мог отображать информацию о моем пациенте вместе с информацией о его докторе, в результате чего в моем расписании, которое войдет в HTML.

Вот скриншот структуры моего firebase / firestore:

Мой график, который должен иметь какой-то внешний ключ https://imgur.com/a/9lEtjNB

Structure

Patient Structure

Medic Structure

Тогда вот как яизвлекаю мои данные из firestore как объект в структуре JSON:

  carregarPerfil(){
    var query = firebase.firestore().collection("Usuario")
    var auxint = 0;
    this.dataAux
    let auxString = '[';
    query.where('Documento.nome', '==', 'Merlin').where('Documento.login', '==', 'merlin').get().then(res => {
      res.forEach(item => {

        auxint++;
        auxString += '{"id":"' + item.id + '","Usuario":' + JSON.stringify(item.data()) + '}';
        console.log(item);
        if (res.size != auxint)
          auxString += ', ';
      })
      auxString += ']';
      this.dataJSON = JSON.parse(auxString);
      this.Usuario = this.dataJSON;
      console.log(this.Usuario);
    }).catch(err => {
      console.log('algum erro ' + err);
    });
}

Я пытался прочитать документацию по firestore, но из-за того, что он не обрабатывает его как JSON, и он не 'показать, как сделать это с помощью 3 запросов, шаг за шагом, мне стало трудно, поэтому мне нужна помощь в этом.

1 Ответ

0 голосов
/ 19 сентября 2018

Следующее поможет.Поскольку вы хотите извлечь параллельно три документа, а метод get() является асинхронным и возвращает обещание, вам необходимо использовать Promise.all().Обратите внимание, что массив results имеет тот же порядок, что и массив promises (поэтому первый элемент results - это документ especialidade, затем medico и т. Д.).

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

    var db = firebase.firestore();
    var promises = []

    var especialidadeQuery = db.collection('specialties').doc('xTWQVLM8O9WRx89LS1Ba').get();
    promises.push(especialidadeQuery);

    var medicoQuery = db.collection('doctors').doc('CP5Gd2UwGyDYqs9eXuGl').get();
    promises.push(medicoQuery);

    var patienteQuery = db.collection('patients').doc('AMZpmX9BOyRlfPQpwfmz').get();
    promises.push(patienteQuery);

    Promise.all(promises).then(results => {
        results.map(docSnapshot => {
            console.log(docSnapshot.data());
        });
    });

Обратите внимание, однако, что если вам просто нужны имена пациента, врача и специалиста, вы можете очень легко сохранить эти значения напрямуюв документе повестки дня.Этот механизм нормализации довольно распространен в слове базы данных NoSQL и позволяет оптимизировать запросы (здесь 1 вместо 1 + 3).

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