从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的说明获取该文件。
- 转到API控制台凭据页面。
- 从项目下拉列表中,选择您的项目。
- 在“凭据”页面上,选择“创建凭据”下拉列表,然后选择“服务帐户密钥”。
- 从“服务帐户”下拉列表中,选择现有服务帐户或创建新帐户。
- 对于Key type,选择JSON键选项,然后选择Create。该文件会自动下载到您的计算机。
- 将刚刚下载的* .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)
- 创建一个空文件夹(称之为firebaseImportExport)并运行npm init
- 转到源Firebase项目 - >设置 - >服务帐户
- 单击Generate new private key按钮并将文件重命名为source.json并将其放在firebaseImportExport文件夹中
- 对目标项目执行相同的操作(步骤2和3),并将文件重命名为destination.json
- 安装
npm i firebase-admin
npm包。 - 在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 集合中的 JSON URL 获取的列表
有没有办法只导出Firestore增量或自上次导出后的更改(差异)?