从 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 中的说明获取该文件。
- Go to the API Console Credentials page.
- From the project drop-down, select your project.
- On the Credentials page, select the Create credentials drop-down, then select Service account key.
- From the Service account drop-down, select an existing service account or create a new one.
- For Key type, select the JSON key option, then select Create. The file automatically downloads to your computer.
- 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 包发布。欢迎试用并提供一些反馈。
如果有人想要使用 Python 2 或 3.
的解决方案
编辑:请注意,这不会备份规则
在 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)
- 创建一个空白文件夹(命名为 firebaseImportExport )和 运行 npm init
- 转到源 Firebase 项目 -> 设置 -> 服务帐户
- 点击生成新私钥按钮并将文件重命名为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()});
});
});
});
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
打开您的任何客户端 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 个用户!
由于我们可以在 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 中的说明获取该文件。
- Go to the API Console Credentials page.
- From the project drop-down, select your project.
- On the Credentials page, select the Create credentials drop-down, then select Service account key.
- From the Service account drop-down, select an existing service account or create a new one.
- For Key type, select the JSON key option, then select Create. The file automatically downloads to your computer.
- 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 包发布。欢迎试用并提供一些反馈。
如果有人想要使用 Python 2 或 3.
的解决方案编辑:请注意,这不会备份规则
在 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)
- 创建一个空白文件夹(命名为 firebaseImportExport )和 运行 npm init
- 转到源 Firebase 项目 -> 设置 -> 服务帐户
- 点击生成新私钥按钮并将文件重命名为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()});
});
});
});
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
打开您的任何客户端 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 个用户!