web-dev-qa-db-fra.com

Firestore - Récupère les collections de documents

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?

4
eskan

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.

4
Sam Stern
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 );

  });

});
6
Ryosuke Hujisawa

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

2
Daniel

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);
        });
    });
1
Yang

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}`);
    });
});
0
John Cummings