我正在尝试使用以下代码将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:代码已更新。这是我得到的错误 错误:数据不应为空或应包含“字段”选项
答案 0 :(得分:1)
Firestore中的查询很浅,这意味着当您查询collectionname
集合时,您会获得该集合中的文档,但不要时会得到这些子集合中的文档。
您必须逐个查询每个子集合,以获取它们包含的文档并将其内容添加到CSV中。
如果您不知道这些子集合的名称(即它们是由用户在使用您的应用程序时创建的,而不是由数据库架构师在设计数据模型时创建的),则可以在以下article中找到一种使用Cloud Function列出Firestore文档的所有子集合的方法(免责声明,我是本文的作者)。