javascript - 如何使用 Node js导出云Firestore中的动态嵌套集合数据?

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

enter image description here enter image description here enter image description here如何使用 node js 在 Cloud firestore 中导出动态嵌套集合?

var express = require("express");
var router = express.Router();
var admin = require("firebase-admin");
var databaseURL = "databaseURL"; // Initiate databaseURL
var serviceAccount = require("../serviceaccount.json"); // Initiate serviceAccount
if (admin.apps.length) {
  admin.app();
} else {
  admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: databaseURL
  })
}
var firestoredb = admin.firestore();
var CollectionName = request.body.CollectionName;
var SubCollectionName = request.body.SubCollectionName;
router.get("/", async (req, res, next) => {
  await firestoredb.collection(CollectionName).doc().collection(SubCollectionName).doc().get()
    .then(async snapshot => {
      var snap_size = snapshot.size;
      console.log("snap_size", snap_size)
      var arr_Collection_Details = [];
      snapshot.forEach(async doc => {
        var CollectionData = doc.data();
        arr_Collection_Details.push(CollectionData)
        fs.writeFile("filename.json", JSON.stringify(arr_Collection_Details), function (err) {
          if (err) {
            console.log("error:", err.message);
            res.json({
              returncode: 201,
              message: err.message
            })
          } else {
            console.log("Data Exported Sucessfully");
            res.json({
              returncode: 200,
              message: "Data Exported Sucessfully"
            })
          }
        });
      });
    })
  .catch((err) => {
    res.json({
      returncode: 201,
      message: err.message
    })
  })
});
module.exports = router;

我获取子集合数据,但我需要嵌套集合名称是动态的嵌套集合数据。

如何编写nestedcollection的查询

最佳答案

你在评论中提问:

Is it possible to fetch all sub collections and its documents of a collection without knowing its internal sub collection names or document ids?

虽然无法使用移动和网络客户端 SDK 检索文档的子集合列表,但可以使用 Cloud Firestore 服务器客户端库,尤其是 Firebase Admin Node.js SDK。这在下面有详细解释 article (免责声明,我是作者)

由于您使用 Admin SDK,因此您可以使用此技术,如下所示:

//Get the path of the parent pocument
const docPath = "col1/doc2/subcol4/doc7";  //For example

const collections = await admin.firestore().doc(docPath).listCollections();

const promises = [];

collections.forEach(collRef => {
    promises.push(collRef.get());
})
const querySnapshotsArray = await Promise.all(promises);

querySnapshotsArray.forEach(querySnapshot => {
   querySnapshot.forEach(doc => {
       console.log(doc.id, " => ", doc.data());
   });
 });

注意有一个类似的listCollections()列出 Firestore 数据库的所有根集合的方法。

关于javascript - 如何使用 Node js导出云Firestore中的动态嵌套集合数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61657633/

相关文章:

javascript - NodeJS 缓冲区和加密库针对不同版本给出了不同的答案

javascript - NestJS - 预期未定义为 GraphQL 模式

javascript - 图表js在运行时通过按钮单击显示/隐藏图例

javascript - TinyMCE 4 有没有办法在编辑时自动附加字符?

javascript - 无法在 w3school 的 html 示例中的侧面板中完全向下滚动

javascript - 为什么我运行“npm install”时会得到很多包?

javascript - Puppeteer 等待页面和 setTimeout 在 Firebase 云功能中不起作用

firebase - 以相同文本开头的多个集合的云函数触发器

java - 无法从 firestore 中检索已经存在的图像 uri

javascript - Angularjs 使用 url 重定向到状态