firestore-tools CLI
A CLI for firestore data management.
Features
- export data from firestore into json
- import data into firestore from json
Must Read Before Use
firestore-tools
CLI is not suitable to use directly on production database or large datasets. It's recommended to use during concept validation, test, data mock of project development.
Install firestore-tools
globally
yarn global add firestore-tools
# or
npm install --global firestore-tools
Alternatively, you can run it using npx
without install, for example
npx firestore-tools ...
Go to GCP IAM & Identity Console, select your firebase project on the top. Then select the firebase adminsdk
service account, create a private key and download the JSON file. This file will be used to authenticate the CLI to access firestore database with admin access.
# if arguments supplied from command line, you will be prompt to give that information
firestore-tools export
# you can also supply arguments from command line
firestore-tools export --key project-id-36257f6a2dcc.json --json data.json -spaces 2 --collections Users,Posts
- export - command name, could also use alias
e
- key - required service account private key json file
- json - output JSON file
- spaces - indentation in JSON file
- collections - comma separated top level collections to export
# if arguments supplied from command line, you will be prompt to give that information
firestore-tools import
# you can also supply arguments from command line
firestore-tools import --key project-id-36257f6a2dcc.json --json data.json
- import - command name, could also use alias
i
- key - required service account private key json file
firestore-tools
use JSON data schema to map the data in firestore database, below is an example.
Any key prefixed with lower dash _
has special meaning of indicating data type and structure.
{
"collection-id": {
"document-id": {
"_data": {
"geopoint": {
"_latitude": 47.7558843,
"_longitude": 122.2646634
},
"null": null,
"number": 123456,
"array": [
"hello",
"world"
],
"reference": {
"_segments": [
"Test",
"referred"
]
},
"map": {
"field": "hellofield"
},
"timestamp": {
"_seconds": 1580848496,
"_nanoseconds": 0
},
"boolean": true,
"string": "helloworld"
},
"_collections": {
"subcollection-id": {
"document-id": {
"_data": {
"text": "hello"
},
"_collections": {}
}
}
}
}
}
}