如何将Firestore子集合数据导出到CSV

时间:2020-01-22 08:17:51

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

我正在尝试使用以下代码将Firestore集合的子集合导出到CSV文件中。

用于此操作的npm是“ json2csv”

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const json2csv = require("json2csv").parse;
exports.csvJsonReport = functions.https.onRequest((request, response) => {
    const db = admin.firestore();
    const data = db.collection("collectionname").doc().collection("subcollection") //collection name ,documentid, subcollection
    return data.get().then((querySnapshot) => {
        var object = {}
        var jsondata = [];
        querySnapshot.forEach(doc => {
            object = doc.data();
            object['docid'] = doc.id; // must add this line after doc.data
            console.log("objectbefore", object)
            jsondata.push(object);
            console.log("objectafter", object)
            console.log(jsondata);
        });
        const csv = json2csv(jsondata);
        response.setHeader(
            "Content-disposition",
            "attachment; filename=files.csv"//file name.csv
        );
        response.set("Content-Type", "text/csv");
        return response.status(200).send(csv)
    }).catch((err) => {
        return console.log(err);
    });
});

但是我在输出CSV文件中得到的结果只是没有内部子集合的集合。

是否可以通过这种方法导出子集合数据?如果没有,如何将子集合数据导出到CSV?

编辑#1:代码已更新。这是我得到的错误 错误:数据不应为空或应包含“字段”选项

1 个答案:

答案 0 :(得分:1)

Firestore中的查询很浅,这意味着当您查询collectionname集合时,您会获得该集合中的文档,但不要时会得到这些子集合中的文档。

您必须逐个查询每个子集合,以获取它们包含的文档并将其内容添加到CSV中。

如果您不知道这些子集合的名称(即它们是由用户在使用您的应用程序时创建的,而不是由数据库架构师在设计数据模型时创建的),则可以在以下article中找到一种使用Cloud Function列出Firestore文档的所有子集合的方法(免责声明,我是本文的作者)。