【问题标题】:How to export dynamic nested collection data in cloud firestore using node js?如何使用节点 js 导出云 Firestore 中的动态嵌套集合数据?
【发布时间】:2020-05-07 12:18:09
【问题描述】:

如何使用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;

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

如何编写嵌套集合的查询

【问题讨论】:

  • 您好,您需要详细说明动态方面是如何实现的。
  • 我按降序添加 db 结构图像 – Renaud Tarnec
  • 谢谢。我还不清楚你想要实现什么。你能根据截图解释一下吗?什么是动态?
  • 示例有 5 个嵌套集合,其中 5 个嵌套集合名称不同,然后只有我提到动态,我也添加了我的代码
  • 要查询集合中的文档,您需要知道它的完整路径。您对不起作用的代码有什么期望?

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


【解决方案1】:

你在 cmets 中问:

是否可以获取所有子集合及其文档 不知道其内部子集合名称的集合或 文档 ID?

虽然无法使用移动和网络客户端 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 数据库的所有根集合。

【讨论】:

  • 我执行了这个程序,但是在空数组上输出了一个输出
  • 我在上面添加了图片
  • 请将图片添加到您的原始问题中。而且,更重要的是,分享您的整个代码。你怎么declare docPath 特别是。
  • 我认为最简单的方法是使用服务器端客户端库,或者使用@RenaudTarnec 在他的文章gist.github.com/rtarnec/… 中提到的云功能@
  • @VijayRahul 我看过你的代码。恳求将其添加到您自己的问题中,方法是编辑它(使用问题下方的编辑链接),而不是编辑我的答案。根据我的回答,您的代码确实有效。我已经成功测试过了。所以你可能在其他地方有问题。
猜你喜欢
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
相关资源
最近更新 更多