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

Node.js 如何将Firestore子集合数据导出到CSV,node.js,firebase,google-cloud-firestore,google-cloud-functions,Node.js,Firebase,Google Cloud Firestore,Google Cloud Functions,我正在尝试使用以下代码将firestore集合的子集合导出到CSV文件 用于此目的的npm是“json2csv” 但我在输出CSV文件中得到的结果是,只有集合,没有内部子集合 是否可以使用此方法导出子集合数据?如果没有,如何将子集合数据导出到CSV 编辑#1:代码已更新。这就是我得到的错误 错误:数据不应为空或应包含“字段”选项,Firestore中的查询很浅,这意味着当您查询collectionname集合时,您会获得此集合中的文档,但不会获得子集合中的文档 您必须逐个查询每个子集合,以便获取

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

用于此目的的npm是“json2csv”

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

是否可以使用此方法导出子集合数据?如果没有,如何将子集合数据导出到CSV

编辑#1:代码已更新。这就是我得到的错误
错误:数据不应为空或应包含“字段”选项,Firestore中的查询很浅,这意味着当您查询
collectionname
集合时,您会获得此集合中的文档,但不会获得子集合中的文档

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


如果您不知道这些子集合的名称(即,它们是用户在使用您的应用程序时创建的,而不是数据库架构师在设计数据模型时创建的),您将在下面的方法中找到一种列出Firestore文档的所有子集合的方法,该文档具有云功能(免责声明,我是文章作者).

我使用了此文章链接,但出现了一个错误。错误:数据不应为空或应包含“字段”选项请将新代码添加到问题中(编辑问题并将其添加到底部)。我添加了新代码,请检查我的代码Renaud Tarnec如果我有足够的代表投票,我会投反对票,因为你的文章位于中等博客付费墙后面。@BenjiA。你可以创建一个免费的中型帐户,看看你可以发布你的收藏模型吗?我建议你从基础做起。首先,让我们将函数转换为
async/await
。其次,让我们将子集合数据返回到响应,而不是将其导出到csv文件。如果您能够执行1-2个步骤,那么将数据导出到csv就很容易了。
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);
    });
});