Как экспортировать динамические c вложенные данные коллекции в облачном хранилище с использованием node js? - PullRequest
2 голосов
/ 07 мая 2020

enter image description hereenter image description hereenter image description here Как экспортировать динамическую c вложенную коллекцию в облачном хранилище с помощью node js?

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;

Я беру данные вложенной коллекции, но мне нужны данные вложенной коллекции, имя вложенной коллекции динамически.

как написать запрос для вложенной коллекции

1 Ответ

2 голосов
/ 07 мая 2020

Вы спрашиваете в комментариях:

Можно ли получить все вложенные коллекции и их документы коллекции, не зная ее внутренних имен вложенных коллекций или идентификаторов документов?

Хотя с помощью SDK для мобильных устройств и веб-клиентов невозможно получить список вложенных коллекций документа, это возможно с помощью клиентских библиотек сервера Cloud Firestore и, в частности, с помощью SDK Firebase Admin Node.js. Это подробно объясняется в следующей статье (Заявление об ограничении ответственности, я являюсь автором)

Поскольку вы используете 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() метод для перечисления всех root коллекций вашей базы данных Firestore.

...