从 Firestore 导出 json

Export json from Firestore

由于我们可以在 Firebase RTDB 控制台下载 json 文件,是否有任何方法可以导出 Firestore collection/document 数据的 json 文件?

我的主要目标之一是比较数据before/after更新文档。

没有,您需要想出自己的过程,例如查询集合并遍历所有内容。

更新

截至 2018 年 8 月 7 日,我们确实有 managed export system that allows you to dump your data into a GCS bucket. While this isn't JSON, it is a format that is the same as Cloud Datastore uses, so BigQuery understands it. This means you can then import it into BigQuery

Firestore 仍处于开发初期,因此请查看 docs on backups 以获取有关 Firestore 的任何信息。

我发现这个 npm 包 node-firestore-backup 既简单又实用。

请注意,--accountCredentials path/to/credentials/file.json 指的是服务帐户密钥 json 文件,您可以按照 https://developers.google.com/identity/protocols/application-default-credentials 中的说明获取该文件。

  1. Go to the API Console Credentials page.
  2. From the project drop-down, select your project.
  3. On the Credentials page, select the Create credentials drop-down, then select Service account key.
  4. From the Service account drop-down, select an existing service account or create a new one.
  5. For Key type, select the JSON key option, then select Create. The file automatically downloads to your computer.
  6. Put the *.json file you just downloaded in a directory of your choosing. This directory must be private (you can't let anyone get access to this), but accessible to your web server code.

我刚刚为 Firestore 写了一个备份和恢复。你可以试试我的 GitHub.

https://github.com/dalenguyen/firestore-backup-restore

谢谢,

我编写了一个遍历数据库 collections/documents 并将所有内容导出到单个 json 文件中的工具。此外,它还将导入相同的结构(对 cloning/moving Firestore 数据库有帮助)。因为我有几个同事使用过代码,所以我想我会把它作为一个 NPM 包发布。欢迎试用并提供一些反馈。

https://www.npmjs.com/package/node-firestore-import-export

如果有人想要使用 Python 23.

的解决方案

编辑:请注意,这不会备份规则

https://github.com/RobinManoli/python-firebase-admin-firestore-backup

上进行分叉

首先安装和设置 Firebase Admin Python SDK:https://firebase.google.com/docs/admin/setup

然后将其安装在您的 python 环境中:

pip install firebase-admin

安装 Firestore 模块:

pip install google-cloud-core
pip install google-cloud-firestore

(来自

Python代码

# -*- coding: UTF-8 -*-

import firebase_admin
from firebase_admin import credentials, firestore
import json

cred = credentials.Certificate('xxxxx-adminsdk-xxxxx-xxxxxxx.json') # from firebase project settings
default_app = firebase_admin.initialize_app(cred, {
    'databaseURL' : 'https://xxxxx.firebaseio.com'
})

db = firebase_admin.firestore.client()

# add your collections manually
collection_names = ['myFirstCollection', 'mySecondCollection']
collections = dict()
dict4json = dict()
n_documents = 0

for collection in collection_names:
    collections[collection] = db.collection(collection).get()
    dict4json[collection] = {}
    for document in collections[collection]:
        docdict = document.to_dict()
        dict4json[collection][document.id] = docdict
        n_documents += 1

jsonfromdict = json.dumps(dict4json)

path_filename = "/mypath/databases/firestore.json"
print "Downloaded %d collections, %d documents and now writing %d json characters to %s" % ( len(collection_names), n_documents, len(jsonfromdict), path_filename )
with open(path_filename, 'w') as the_file:
    the_file.write(jsonfromdict)
  1. 创建一个空白文件夹(命名为 firebaseImportExport )和 运行 npm init
  2. 转到源 Firebase 项目 -> 设置 -> 服务帐户
  3. 点击生成新私钥按钮并将文件重命名为source.json并将其放入firebaseImportExport文件夹
  4. 对目标项目执行相同的操作(第 2 步和第 3 步)并将文件重命名为 destination.json
  5. 安装 npm i firebase-admin npm 包。
  6. index.js
  7. 中写入如下代码
const firebase = require('firebase-admin');

var serviceAccountSource = require("./source.json");
var serviceAccountDestination = require("./destination.json");

const sourceAdmin = firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccountSource),
    databaseURL: "https://**********.firebaseio.com" // replace with source
});

const destinationAdmin = firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccountDestination),
    databaseURL: "https://$$$$$.firebaseio.com"
  }, "destination");

const collections = [ "books", "authors",   ...]; // replace with your collections

    var source = sourceAdmin.firestore();
    var destination = destinationAdmin.firestore();
   collections.forEach(colName => {
    source.collection(colName).get().then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            destination.collection(colName).doc(doc.id).set({...doc.data()});
        });
    });
   });

Google 使它比需要的更难,因此社区找到了解决方法。如果你安装了 npm,你可以这样做:

导出

npx -p node-firestore-import-export firestore-export -a credentials.json -b backup.json

导入

npx -p node-firestore-import-export firestore-import -a credentials.json -b backup.json

Source

打开您的任何客户端 firebase 应用程序(React、Angular 等)。在任何地方使用此代码登录控制台并复制

const products = await db
  .collection("collectionName")
  .where("time", ">", new Date("2020-09-01"))
  .get()


const json = JSON.stringify(products.docs.map((doc) => ({ ...doc.data() })))
console.log(json)

对我有用。

我使用 Cloud Functions 将 Firestore 中的所有数据导出为 JSON 格式。我用的函数:

exports.exportFirestore2Json = functions.https.onRequest((request, response) => {
    db.collection("data").get().then(function(querySnapshot) {
        const orders = [];
        var order = null

         querySnapshot.forEach(doc => {
             order = doc.data();
             orders.push(order);
         });

         response.send(JSON.stringify(orders))

         return true
    })
    .catch(function(error) {
        console.error("Error adding document: ", error);
        return false
    });
})

然后,去https://your-project-id.cloudfunctions.net/exportFirestore2Json你会看到这样的东西

有一个用于 firestore 导出/导入的 npm

要导出的项目 转到 -> 项目设置 -> 服务帐户 -> 生成新私钥 -> 将其保存为 exportedDB.json

要导入的项目 转到 -> 项目设置 -> 服务帐户 -> 生成新私钥 -> 将其保存为 importedDB.json

运行 这 2 个命令来自您保存文件的文件夹

导出: npx -p node-firestore-import-export firestore-export -a exportedDB.json -b backup.json

导入: npx -p node-firestore-import-export firestore-import -a importedDB.json -b backup.json

可以,您不需要在 Firebase 控制台中开始计费。有一个很棒的 npm 包 https://www.npmjs.com/package/firestore-export-import,你可以轻松导出和导入 firestore collection 和文档。只需按照以下步骤操作即可:

-获取您的服务帐户密钥 打开 Firebase 控制台 > 项目设置 > 服务帐户 > 生成新私钥

将下载的文件重命名为serviceAccountKey.json

-现在创建一个新文件夹和index.js文件。

-把你servicekey.json粘贴到这个文件夹

-现在安装这个包

npm install firestore-export-import

yarn add firestore-export-import

正在从 firebase 导出数据

const { initializeApp} =  require('firestore-export-import')

const  serviceAccount  =  require('./serviceAccountKey.json')

const  appName  =  '[DEFAULT]'

initializeApp(serviceAccount, appName)

const  fs  =  require('fs');

const { backup } =  require('firestore-export-import')
//backup('collection name')

backup('users').then((data) =>
{
    const  json  =  JSON.stringify(data);

    //where collection.json is your output file name.
    fs.writeFile('collection.json', json, 'utf8',()=>{

    console.log('done');

})

});

执行节点 index.js,您应该会看到一个新的 collection.json 文件,其中包含您的 collection 和文档。如果它看起来有点乱漂亮在线格式化它 https://codebeautify.org/jsonviewer

这个 index.js 只是一个非常基本的配置,它导出整个 collection 以及其中的所有内容,阅读他们的文档,您可以进行查询等等!

正在将数据导入到 firebase

const { initializeApp,restore } =  require('firestore-export-import')

const  serviceAccount  =  require('./serviceAccountKey.json')
const  appName  =  '[DEFAULT]'

initializeApp(serviceAccount, appName)
restore('collection.json', {
//where refs is an array of key items
    refs: ['users'],
    //autoParseDates to parse dates if documents have timestamps
    autoParseDates: true,

    },()=>{

console.log('done');
})

执行后,您应该会看到您的 firestore 中填充了 collection 个用户!