从Firestore导出json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Firestore导出json相关的知识,希望对你有一定的参考价值。

由于我们可以在Firebase RTDB控制台下载json文件,有没有办法导出Firestore集合/文档数据的json文件?

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

答案

没有,你需要提出自己的过程,例如查询集合和循环所有内容。

Update

截至2018年8月7日,我们有一个managed export system,允许您将数据转储到GCS存储桶中。虽然这不是JSON,但它的格式与Cloud Datastore使用的格式相同,因此BigQuery了解它。这意味着你可以然后import it into BigQuery

另一答案

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

https://github.com/dalenguyen/firestore-import-export

或者只使用NPM包中的备份和还原:

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

谢谢,

另一答案

我编写了一个遍历数据库集合/文档的工具,并将所有内容导出到一个json文件中。此外,它还将导入相同的结构(有助于克隆/移动Firestore数据库)。由于我有几个同事使用代码,我想我会把它作为NPM包发布。随意尝试并提供一些反馈。

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

另一答案

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. 转到API控制台凭据页面。
  2. 从项目下拉列表中,选择您的项目。
  3. 在“凭据”页面上,选择“创建凭据”下拉列表,然后选择“服务帐户密钥”。
  4. 从“服务帐户”下拉列表中,选择现有服务帐户或创建新帐户。
  5. 对于Key type,选择JSON键选项,然后选择Create。该文件会自动下载到您的计算机。
  6. 将刚刚下载的* .json文件放在您选择的目录中。此目录必须是私有的(您不能让任何人访问此目录),但可以访问您的Web服务器代码。
另一答案

如果有人想要使用Python 2的解决方案。

叉在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

(来自ImportError: Failed to import the Cloud Firestore library for Python

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. 单击Generate new private key按钮并将文件重命名为source.json并将其放在firebaseImportExport文件夹中
  4. 对目标项目执行相同的操作(步骤2和3),并将文件重命名为destination.json
  5. 安装npm i firebase-admin npm包。
  6. 在index.js中编写以下代码

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()});
        });
    });
   });

以上是关于从Firestore导出json的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firestore 导出安全和索引规则?

保存从 Firestore 集合中的 JSON URL 获取的列表

有没有办法只导出Firestore增量或自上次导出后的更改(差异)?

将大型 json 文件从 Firebase 存储传输到 Firestore

如何将JSON字符串列行转换为可查询表

如何定期将大型 JSON 数据集导入 Cloud Firestore?