尝试在Node.js中加载所有Firestore文档

时间:2019-12-01 00:20:16

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

我可以成功请求集合中的特定文档。但是我需要能够查询所有文档,因为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);
        });
});

3 个答案:

答案 0 :(得分:2)

answer对此Doug Stevenson的重构版本

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”将保存您的所有数据!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

根据道格的回答,未加载.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);
        });
});