Javascript 如何从firestore读取数据?

Javascript 如何从firestore读取数据?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我正在努力学习如何使用firestore 用户表示要尝试此格式: db.collection("users").get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); }); }); 所以,我用它来做这件事(把db改成fsDB,“用户”改成“时事通讯” 当我尝试此操作时,我得到一个错误,

我正在努力学习如何使用firestore

用户表示要尝试此格式:

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});
所以,我用它来做这件事(把db改成fsDB,“用户”改成“时事通讯”

当我尝试此操作时,我得到一个错误,表示querySnapshot未定义。错误消息的屏幕截图已附加

我看到并尝试了它的建议如下:

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

                            if (querySnapshot.empty) { 
                                console.log('no documents found');
                            } else {
                                    querySnapshot.docs.map(function (documentSnapshot) {
                                        console.log(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.log(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.log(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.log(`${doc.id} => ${doc.data().email}`);
                }
            );
            });

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

]我认为你应该去掉“.query”。 如果集合中有数据,则
.empty
返回
false
。 但是我想知道,为什么在你的例子中,
querySnapshot
没有定义

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


我相信您正在使用React,我刚刚意识到您正在调用
render
方法中讨论的方法

尝试在
componentDidMount
中执行此操作。可以找到一个参考

因此,您的代码如下所示:

class YourClass extends React.Component {
   componentDidMount(){
      fsDB.collection("newsletters").get().then((querySnapshot) => {
         querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
         });
      });
   }
   render(){
      return (....your existing jsx....)
   }
}
请注意,我不知道您的类名,也不知道您如何定义组件。但我只是说您需要在
componentDidMount
中移动代码


我们无法查看您的整个文件。但我确信这是一个语法错误(尤其是JSX)

您可以使用自动脚本来执行此操作。 您只需要python和firebase_管理

  • pip安装firebase_管理员
  • 下载
  • 现在运行getData.py脚本
  • 为它提供firebase项目私钥的路径
  • 现在给出文档名

  • “我得到一个错误,说querySnapshot没有定义”@Phil-它引用了这个查询语句:querySnapshot.forEach((doc)=>{console.log(
    ${doc.id}=>${doc.data()}
    ););错误信息到底是什么?如果你能发布一个显示其上下文的屏幕截图,这可能会有所帮助。你是否绝对确定你问题中的代码与你的实际代码相匹配,包括大写/小写字符?@Phil-screenshot attachedI我确定。我一直在交替使用复数和单数大小写,以确保没有打开它关于搜索记录的十条规则。但同样的错误仍然存在。这给出了同样的错误-使用上面标记的if语句。感谢您的帮助。一定有一种简单的方法可以从数据库读取数据!这是我第二天尝试找出它是什么!@Phil已经回答了上面这个谜团的一部分。我尝试了这个。我得到了e与使用其他常量在return语句上方定义变量的错误相同。我在异步中使用了它。上面帖子中显示的相同语法错误仍然存在,并且控制台没有记录数据。实际上,如果我在其上放置WAIT标记,这会起作用。感谢帮助,我无法理解jsx to cat的react文档中的示例ch数据并显示它。这看起来像我正在寻找的位,但我不知道在这个mount语句中如何处理它:const list=This.listRef.current;@Mel,你能在你的问题中给出你的整个组件吗?这样,我们可以帮助你实现你的目标。我猜你需要使用
    setState
    来实现它。我不知道我认为您需要使用wait,但我无法进一步帮助您,因为我看不到您的组件hi@kkesley-state是上面添加的
    class YourClass extends React.Component {
       componentDidMount(){
          fsDB.collection("newsletters").get().then((querySnapshot) => {
             querySnapshot.forEach((doc) => {
                console.log(`${doc.id} => ${doc.data()}`);
             });
          });
       }
       render(){
          return (....your existing jsx....)
       }
    }