Node.js 如何将Firestore子集合数据导出到CSV
我正在尝试使用以下代码将firestore集合的子集合导出到CSV文件 用于此目的的npm是“json2csv” 但我在输出CSV文件中得到的结果是,只有集合,没有内部子集合 是否可以使用此方法导出子集合数据?如果没有,如何将子集合数据导出到CSV 编辑#1:代码已更新。这就是我得到的错误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中的查询很浅,这意味着当您查询
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);
});
});