【问题标题】:Trying to load all firestore documents in Node.js尝试在 Node.js 中加载所有 Firestore 文档
【发布时间】:2020-03-26 00:54:18
【问题描述】:

我可以成功请求集合中的特定文档。但我需要能够查询所有文档,因为 Firestore(与实时数据库不同)不支持导出。

我知道以下是不可能的,但肯定有某种方法可以导出整个集合吗?

router.get('/firebase', function (req, res) {
    var admin = require('firebase-admin');
    const firebaseConfig = require('../firebaseConfig.json');

    admin.initializeApp({
        credential: admin.credential.cert(firebaseConfig),
        databaseURL: 'https://***.firebaseio.com'
    });

    let db = admin.firestore();
    let cityRef = db.collection('marketing').doc('*');
    let getDoc = cityRef.get()
        .then(doc => {
            if (!doc.exists) {
                console.log('No such document!');
            } else {
                console.log('Document data:', doc.data());
            }
        })
        .catch(err => {
            console.log('Error getting document', err);
        });
});

【问题讨论】:

    标签: node.js firebase google-cloud-firestore


    【解决方案1】:

    根据 Doug 的回答,不加载 .doc() 允许我获取所有记录。我之前尝试过,但是 console.log 很难阅读。从此StackOverflow answer 添加一个 forEach 帮忙。

    router.get('/firebase', function (req, res) {
        var admin = require('firebase-admin');
        const firebaseConfig = require('../firebaseConfig.json');
    
        admin.initializeApp({
            credential: admin.credential.cert(firebaseConfig),
            databaseURL: 'https://***.firebaseio.com'
        });
    
        let db = admin.firestore();
    
        db.collection('marketing').get()
            .then(snapshot => {
                snapshot.forEach(doc => {
                    console.log(doc.id, '=>', doc.data());
                });
            })
            .catch(err => {
                console.log('Error getting document', err);
            });
    });
    
    

    【讨论】:

      【解决方案2】:

      Doug Stevensonanswer 的重构版本

      router.get('/firebase', async function (req, res) {
          var admin = require('firebase-admin');
          const firebaseConfig = require('../firebaseConfig.json');
      
          admin.initializeApp({
              credential: admin.credential.cert(firebaseConfig),
              databaseURL: 'https://gundies.firebaseio.com'
          });
      
          let db = admin.firestore();
      
          const snapshot = await db.collection("marketing").get();
      
          const docs = snapshot.docs.map(doc => doc.data())
      

      “docs”变量将保存您的所有数据!

      【讨论】:

      • 我喜欢这个异步代码,很干净,我会用这个代替我的代码。谢谢!
      【解决方案3】:

      db.collection('marketing').doc('*') 的语法不正确。 Firestore 查询中没有文档通配符。只需使用 db.collection('marketing').get() 获取包含集合中所有文档的 QuerySnapshot。

      它的工作方式与您在 documentation for queries 中看到的一样,只是您没有指定任何过滤器来限制结果集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多