由于我们可以在Firebase RTDB控制台下载json文件,有没有办法导出Firestore集合/文档数据的json文件?
我的主要目标之一是比较更新文档之前/之后的数据。
答案 0 :(得分:19)
没有,你需要提出自己的过程,例如查询集合和循环所有内容。
截至2018年8月7日,我们确实有一个managed export system,允许您将数据转储到GCS存储桶中。虽然这不是JSON,但它的格式与Cloud Datastore使用的格式相同,因此BigQuery了解它。这意味着您可以import it into BigQuery。
答案 1 :(得分:12)
我刚为Firestore编写了备份和还原。你可以尝试我的GitHub。
https://github.com/dalenguyen/firestore-import-export
或者只使用NPM包中的备份和还原:
https://github.com/dalenguyen/firestore-backup-restore
谢谢,
答案 2 :(得分:6)
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
答案 3 :(得分:4)
我编写了一个遍历数据库集合/文档的工具,并将所有内容导出到一个json文件中。此外,它还将导入相同的结构(有助于克隆/移动Firestore数据库)。由于我有一些同事使用该代码,我想我会将其作为NPM包发布。请随意尝试并提供一些反馈。
答案 4 :(得分:2)
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服务器代码。
醇>
答案 5 :(得分:2)
有一个用于 Firestore 导出/导入的 npm
要导出的项目 转到-> 项目设置-> 服务帐户-> 生成新的私钥-> 将其保存为exportedDB.json
要导入的项目 转到-> 项目设置-> 服务帐户-> 生成新的私钥-> 将其保存为importedDB.json
从你保存文件的文件夹运行这两个命令
导出: npx -p node-firestore-import-export firestore-export -a exportDB.json -b backup.json
导入: npx -p node-firestore-import-export firestore-import -aimportedDB.json -b backup.json
答案 6 :(得分:1)
如果有人想要使用 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)
答案 7 :(得分:1)
是的,您可以,您无需在 Firebase 控制台中开始计费。有一个很棒的 npm 包 https://www.npmjs.com/package/firestore-export-import,您可以轻松地导出和导入 firestore 集合和文档。只需按照以下步骤操作:
-获取您的服务帐户密钥 打开 Firebase 控制台 > 项目设置 > 服务帐户 > 生成新的私钥
使用 serviceAccountKey.json 重命名下载的文件
-现在创建一个新文件夹和 index.js 文件。
-将您的 servicekey.json 粘贴到此文件夹中
-现在安装这个包
npm install firestore-export-import
OR
yarn add firestore-export-import
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');
})
});
执行 node index.js,您应该会看到一个新的 collection.json 文件,其中包含您的集合和文档。如果它看起来有点凌乱漂亮的在线格式 https://codebeautify.org/jsonviewer
这个 index.js 只是一个非常基本的配置,它导出整个集合及其中的所有内容,阅读他们的文档,您可以进行查询等等!
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 中填充了集合用户!
答案 8 :(得分:0)
DataFrame constructor not properly called!
npm软件包。npm i firebase-admin
答案 9 :(得分:0)
打开任何客户端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)
答案 10 :(得分:0)
对我有用。
我使用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,您会看到类似这样的内容