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