Reactnative: запрос и фильтрация базы данных Firestore и сохранение единственного возвращенного значения поля документа в const / var - PullRequest
1 голос
/ 27 мая 2020

Я установил базу данных Firebase Firestore и хочу отфильтровать ее по определенному значению поля в документе. У меня есть коллекция под названием «PRD» с тысячами документов, все из которых содержат одинаковые поля. Одно из этих полей в документе - это номер GTIN (строка). Я получаю этот номер из штрих-кода (называемого данными) и хочу получить название лекарства (называемое DSCRD, другое поле во всех этих документах), используя отсканированный номер GTIN.

У меня возникли трудности с получением значения из Firebase, и документация, похоже, меня не продвигает. Я пробовал различные методы поиска. На данный момент код для поиска выглядит следующим образом:

import { dbh } from "../firebase/config"
import firestore from '@react-native-firebase/firestore'
    dbh.collection('PRD')
    .where('GTIN', '==', data)
    .get()
    .then(documentSnapshot => {

      console.log('MedData',documentSnapshot.data())    
    });

Я не уверен, как отфильтровать правильное лекарство, используя GTIN, предоставленный сканером штрих-кода, а затем сохранить указанное значение поля c для описания этого лекарства в переменную.

Firebase настроена правильно, так как я могу писать в ней целые коллекции и документы.

Вот структура базы данных, как вы можете видеть, есть коллекция PRD со всеми лекарствами и всеми лекарствами, содержащими поля GTIN и DSCRD:

1 Ответ

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

Проблема с вашей реализацией заключается в том, что вы пытаетесь вызвать documentSnapshot.data() после запроса коллекции. Это синтаксис, который вы использовали бы при получении одного документа. Ваш текущий запрос вернет список документов, которые вам нужно обработать следующим образом:

.then(querySnapshot => {
  querySnapshot.forEach(doc => {
    console.log('MedData', doc.data())  
  })  
});

Предполагая, что GTIN будет извлекать один уникальный документ (не так ли?), Вы можете просто использовать единственный документ, возвращенный запрос, чтобы получить название лекарства, например:

    var medName
    dbh.collection('PRD')
    .where('GTIN', '==', data)
    .get()
    .then(querySnapshot => {
       querySnapshot.forEach(doc => {
          console.log('MedData', doc.data())  
          medName = doc.data().DSCRD
       })  
    });
...