javascript - Firestore - 获取大量集合并进行解析。请求被中止

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

我环顾四周,但找不到明显的解决方案。

我有一个包含 130k 文档的集合。我需要将它们导出为 CSV 文件。 (我认为我已经排序的 CSV 部分)。

我的代码在较小的集合上运行良好,但在集合中的 130k 文档上尝试它时它挂起并且我得到“请求中止”。处理这个问题的最佳方法是什么?

我的代码:

db.collection("games")
.doc(req.params.docid)
.collection("players")
.onSnapshot(snapshot => {
  console.log("On Snapshot")
  snapshot.docs.forEach(data => {

    const doc = data.data();

    downloadArray.push(doc);

  });

  jsonexport(downloadArray, function(err, csv) {
    if (err) return console.log(err);

    fs.writeFile("out.csv", csv, function() {
      res.sendFile(path.join(__dirname, "../out.csv"), err => {
        console.log(err);
      });
    });
  });
});

我正在按照建议尝试分页,但是我无法理解如何在循环完成之前继续调用下一批,因为有时我不知道集合大小,也无法查询如此大的集合大小需要 1-2 分钟。

 let first = db
      .collection("games")
      .doc(req.params.docid)
      .collection("players")
      .orderBy("uid")
      .limit(500);

    let paginate = first.get().then(snapshot => {
      // ...
      snapshot.docs.map(doc => {
        console.log(doc.data());
      });

      // Get the last document
      let last = snapshot.docs[snapshot.docs.length - 1];

      // Construct a new query starting at this document.
      let next = db
        .collection("games")
        .doc(req.params.docid)
        .collection("players")
        .orderBy("uid")
        .startAfter(last.data())
        .limit(500);

最佳答案

你可以 paginate your query with cursors将结果集的大小减小到更易于管理的程度,并继续向前分页直到集合完全迭代。

此外,您还需要使用 get()而不是 onSnapshot(),因为导出过程可能对接收集合中可能添加、更改或删除的任何文档的更新不感兴趣。

关于javascript - Firestore - 获取大量集合并进行解析。请求被中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57469947/

相关文章:

javascript - 控制台错误: No 'Access-Control-Allow-Origin' header is present on the requested resource

javascript - Opera Unite 和 Node.js 有什么区别?

firebase功能配置-删除数据

JavaScript 未在 Rails 回调中执行?

javascript - 我怎样才能做一些 'checks' ,如果这些 'checks' 通过,我允许文件选择窗口出现在 <input type ='file' >

node.js - 在各个目录中加载 Jade 模板?

android - react native Firebase : Trying to port to a new firebase project but app shows older values

android - 使用 Firebase/Parse/PubNub 的跨平台文本、图像、视频 Chat for Android、iOS 和 Web

javascript - Mysql 的 Highchart 不工作

javascript - 在 package.json 中设置 process.env 变量