Как вы читаете данные из firestore?

Я пытаюсь научиться пользоваться firestore.

документация гугла предлагает попробовать этот формат:

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.info(`${doc.id} => ${doc.data()}`);
    });
});

Итак, я использовал это для этого (изменив db на fsDB и «пользователей» на «информационные бюллетени»

fsDB.collection("newsletters").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.info(`${doc.id} => ${doc.data()}`);
    });
});

Когда я пытаюсь это сделать, я получаю сообщение об ошибке, в котором говорится, что querySnapshot не определен. Скрин сообщения об ошибке прилагается.

Как вы читаете данные из firestore?

Я видел эта почта и попробовал его предложение следующим образом:

fsDB.collection("newsletters").query.get().then(function(querySnapshot) { 

                            if (querySnapshot.empty) { 
                                console.info('no documents found');
                            } else {
                                    querySnapshot.docs.map(function (documentSnapshot) {
                                        console.info(documentSnapshot.data().name); 
                                    });
                            }

                        });

Эта попытка генерирует ошибку синтаксического анализа с оператором if, но я также не могу найти способ ее решить.

Это должно иметь простое решение, но я не могу понять, как получить запись из базы данных.

СЛЕДУЮЩАЯ ПОПЫТКА

Я попытался переместить код над оператором return и вставить внутрь переменную, как показано на прикрепленном снимке экрана, но он по-прежнему выдает ошибки, как показано. Эти ошибки одинаковы независимо от того, сохраняю ли я скобки вокруг querySnapshot.

ДОБАВИТЬ СОСТОЯНИЕ

class Fndate extends React.Component {
    state = {
        options: [],
        anzic: [],
        country: [],
        region: [],

    }

    selectCountry (val) {
        this.setState({ country: val });
      }

      selectRegion (val) {
        this.setState({ region: val });
      }

    async componentDidMount() {
        // const fsDB = firebase.firestore(); // Don't worry about this line if it comes from your config.
        let options = [];
        await fsDB.collection("abs_for_codes").get().then(function (querySnapshot) {
        querySnapshot.forEach(function(doc) {
            console.info(doc.id, ' => ', doc.data());
            options.push({
                value: doc.data().title.replace(/( )/g, ''),
                label: doc.data().title + ' - ABS ' + doc.id
            });
            });
        });


        let anzic = [];
        await fsDB.collection("anzic_codes").get().then(function (querySnapshot) {
        querySnapshot.forEach(function(doc) {
            console.info(doc.id, ' => ', doc.data());
            anzic.push({
                value: doc.data().Title.replace(/( )/g, ''),
                label: doc.data().Title + ' - ANZIC ' + doc.id
            });
            });
        });


            await fsDB
            .collection("newsletter")
            .get().then((querySnapshot) => {
                querySnapshot.forEach((doc) => {
                console.info(`${doc.id} => ${doc.data().email}`);
                }
            );
            });

        this.setState({
            options,
            anzic
        });
    }

Как вы читаете данные из firestore?5]5

«Я получаю сообщение об ошибке, в котором говорится, что querySnapshot не определен» ? к какой строке вашего кода относится сообщение об ошибке? Я думаю, что вряд ли это будет какой-либо код в вашем вопросе.
Phil 28.05.2019 01:11

@Phil - это относится к этому оператору запроса: querySnapshot.forEach((doc) => { console.info(${doc.id} => ${doc.data()}); });

Mel 28.05.2019 01:24

Что точно является сообщением об ошибке? Если бы вы могли опубликовать скриншот, показывающий его контекст, это могло бы помочь. Вы абсолютно уверены, что код в вашем вопросе соответствует вашему фактическому коду, включая символы верхнего и нижнего регистра?

Phil 28.05.2019 01:25

@Phil - скриншот прилагается

Mel 28.05.2019 01:29

Я уверен. Я чередовал множественное и единственное число, чтобы убедиться, что не существует неписаных правил поиска записей. но та же ошибка сохраняется

Mel 28.05.2019 01:30

Это ошибка линтинга (eslint/jslint). Похоже, это работает неправильно, потому что querySnapshot определенно определено

Phil 28.05.2019 01:30

я не знаю, что ты имеешь в виду

Mel 28.05.2019 01:31

"не-недеф" не является ошибкой компиляции. Это исходит из вашего статического анализа кода / проверки синтаксиса ~ eslint.org/docs/rules/no-undef. По какой-то причине он помечает это как проблему, но это выглядит как ложное срабатывание.

Phil 28.05.2019 01:33

Может быть глупая идея, но попробуйте убрать скобки вокруг querySnapshot, например .then(querySnapshot => { ... })

Phil 28.05.2019 01:35

Я пробовал это, но та же ошибка сохраняется

Mel 28.05.2019 01:39

Если внимательно посмотреть на скриншот, вы увидите, что у вас смешанные кавычки, то есть "newsletters' (двойная кавычка открыта, одинарная кавычка закрыта), поэтому я спрошу еще раз, уверены ли вы, что код в вашем вопросе соответствует вашему реальному коду?

Phil 28.05.2019 01:41

Это все туда и обратно между единственным и множественным числом. теперь они совпадают, но проблема остается. Я на 100% уверен, что у меня есть коллекция под названием информационный бюллетень. Нижний регистр.

Mel 28.05.2019 01:44

Меня интересует подсветка синтаксиса в строке 1003; он не должен быть полностью синим. Почти похоже, что у вас есть незавершенное строковое выражение. Не могли бы вы предоставить больше контекста для кода?

Phil 28.05.2019 01:50

нет смысла в том, чтобы он находился в файле, в котором он находится, я просто пытаюсь научиться использовать firestore для извлечения данных. это внизу формы для создания записей в другой коллекции. в этой форме нет ошибок. Какую часть вы хотите увидеть?

Mel 28.05.2019 01:55

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

Phil 28.05.2019 01:59

ок - спасибо за подсказку. я попробую исследовать больше сегодня вечером.

Mel 28.05.2019 02:00

Я попытался переместить его выше оператора return, но все еще есть ошибки. плохо продолжать смотреть сегодня вечером. Спасибо за вашу помощь

Mel 28.05.2019 02:09

что в fsDB?

Junius L. 29.05.2019 11:59

@ЮниусЛ. - это мое определение базы данных: import { fsDB, firebase, settings } from "../../../../firebase";

Mel 30.05.2019 02:53

@Mel, попробуйте console.info(querySnapshot) в своем коде. (в котором говорится, что querySnapshot не определен). Может быть что-то связанное с fsDB

kkesley 30.05.2019 03:18

а у вас есть данные в коллекции newsletters?

kkesley 30.05.2019 03:21

@kkesley -- да

Mel 30.05.2019 03:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
22
6 514
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я думаю, вам следует избавиться от «.query». а .empty возвращает false, если у вас есть данные в коллекции. но мне интересно, почему querySnapshot undefined в вашем случае.

db.collection("lessons").get()
  .then(function(querySnapshot) { 
    if (!querySnapshot.empty) {
        querySnapshot.docs.map(function(documentSnapshot) {
        console.info(documentSnapshot.data().name); 
     })
    } else {
    console.info('no documents found');
    }   
});

приставка

console

Это дает ту же ошибку - с оператором if, отмеченным выше. Спасибо за попытку помочь. Должен быть простой способ чтения данных из базы данных! Второй день пытаюсь узнать что это такое!

Mel 28.05.2019 01:23

@Phil ответил на эту часть этой загадки выше

Mel 28.05.2019 01:56
Ответ принят как подходящий

Я полагаю, что вы используете React, и я только что понял, что вы вызываете рассматриваемый метод в методе render.

попробуйте сделать это в componentDidMount. Ссылку можно найти здесь

поэтому ваш код будет таким:

class YourClass extends React.Component {
   componentDidMount(){
      fsDB.collection("newsletters").get().then((querySnapshot) => {
         querySnapshot.forEach((doc) => {
            console.info(`${doc.id} => ${doc.data()}`);
         });
      });
   }
   render(){
      return (....your existing jsx....)
   }
}

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

Мы не смогли увидеть весь ваш файл. Но я уверен, что это синтаксическая ошибка (особенно с JSX)

Я попробовал это. Я получаю ту же ошибку, что и определение переменной над оператором return с другими константами. У меня это асинхронно. Те же синтаксические ошибки, которые показаны в моем посте выше, остаются, и консоль не регистрирует данные.

Mel 30.05.2019 03:57

на самом деле это работает, если я поставлю на него тег ожидания. Спасибо за помощь

Mel 30.05.2019 04:00

Я не могу понять пример в реагирующих документах для jsx, чтобы поймать данные и отобразить их. Это похоже на тот бит, который я ищу, но я не знаю, что с ним делать в этом операторе монтирования: const list = this.listRef.current;

Mel 30.05.2019 04:06

@Mel, можешь ли ты дать нам весь компонент в своем вопросе? Таким образом, мы можем помочь вам в достижении вашей цели. Я предполагаю, что вам нужно использовать setState для этого. И я не думаю, что вам нужно использовать ожидание, но я не могу вам больше помочь, так как я не мог видеть ваш компонент.

kkesley 30.05.2019 04:42

Привет @kkesley - состояние добавлено выше

Mel 01.06.2019 00:59

@Mel, я думаю, вы использовали setState в своем компоненте .. Вы можете повторно использовать это для своего «информационного бюллетеня». Значит ли это, что на ваш вопрос ответили?

kkesley 01.06.2019 01:38

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

Mel 01.06.2019 05:44

Для этого можно использовать автоматизированный скрипт. Все, что вам нужно, это python и firebase_admin.

  1. pip установить firebase_admin
  2. скачать https://github.com/harshit0209/firestore_backup
  3. теперь запустите скрипт getData.py.
  4. укажите путь к закрытому ключу вашего проекта firebase.
  5. теперь дайте имя документа.

Другие вопросы по теме