je voudrais automatiser le processus de sauvegarde d'une base de données Firestore. L'idée est de parcourir en boucle le document racine pour créer une arborescence JSON. mais je n’ai trouvé aucun moyen d’obtenir toutes les collections disponibles pour un document. Je suppose que c'est possible car dans la console Firestore, nous pouvons voir l'arbre . Des idées?
Si vous utilisez le kit SDK du serveur Node.js, vous pouvez utiliser la méthode getCollections()
sur DocumentReference
: https://cloud.google.com/nodejs/docs/reference/firestore/0.8.x/DocumentReference#getCollections
Cette méthode renverra une promesse pour un tableau d'objets CollectionReference
que vous pourrez utiliser pour accéder aux documents des collections.
firebase.initializeApp(config);
const db = firebase.firestore();
db.settings({timestampsInSnapshots: true});
const collection = db.collection('user_dat');
collection.get().then(snapshot => {
snapshot.forEach(doc => {
console.log( doc.data().name );
console.log( doc.data().mail );
});
});
Son possible sur le web (côté client js)
db.collection('FirstCollection/' + id + '/DocSubCollectionName').get().then((subCollectionSnapshot) => {
subCollectionSnapshot.forEach((subDoc) => {
console.log(subDoc.data());
});
});
Merci à @marcogramy commenter
La méthode getCollections () est disponible pour NodeJS.
Exemple de code:
db.collection("Collection").doc("Document").getCollections().then((querySnapshot) => {
querySnapshot.forEach((collection) => {
console.log("collection: " + collection.id);
});
});
Comme mentionné par d'autres, côté serveur, vous pouvez utiliser getCollections().
Pour obtenir toutes les collections au niveau racine, utilisez-le sur la base de données de la manière suivante:
const serviceAccount = require('service-accout.json');
const databaseURL = 'https://your-firebase-url-here';
const admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: databaseURL
});
const db = admin.firestore();
db.settings({ timestampsInSnapshots: true });
db.getCollections().then((snap) => {
snap.forEach((collection) => {
console.log(`paths for colletions: ${collection._referencePath.segments}`);
});
});