Harap baca dokumentasi versi stabil jika Anda hanya ingin menggunakan fuego
Klien Firestore baris perintah.
Unduh salah satu binari yang dikompilasi dari rilis terbaru. (Bangunan tersedia untuk Windows, Linux, Macintosh/Darwin)
Pengguna Linux dapat menginstal Fuego melalui Snap. Namun, Anda mungkin perlu menginstalnya menggunakan --DevMode agar dapat mengakses file google_application_credentials Anda.
snap install fuego --devmode
Jika Anda adalah program membangun yang nyaman, Anda dapat membangun fuego sendiri menggunakan go:
git clone https://github.com/sgarciac/fuego.git
cd fuego
go build . # and 'go install .' if you want
./fuego --help
Anda memerlukan file kunci akun layanan untuk dapat mengakses database Firestore proyek Anda. Untuk membuat file kunci pribadi akun layanan, jika Anda tidak memilikinya, buka konsol proyek Firebase Anda, lalu pengaturan proyek dan kemudian klik pada tab Akun Layanan dan hasilkan kunci pribadi baru.
Setelah Anda memiliki file kunci akun layanan Anda, Fuego akan dapat menemukannya menggunakan salah satu opsi berikut:
--credentials
setiap kali Anda mengeksekusi fuego, yaitu: fuego --credentials ./my-account-service-private-key.json get mycollection mydocumentid
atau
export GOOGLE_APPLICATION_CREDENTIALS=./my-account-service-private-key.json
fuego get mycollection mydocumentid
Basis data Firestore milik proyek. File kredensial aplikasi Google biasanya menentukan proyek yang akan dikerjakan Firestore. Namun Anda dapat, jika perlu, menentukan proyek menggunakan opsi global --projectid
.
Jika Anda perlu menggunakan fuego dengan emulator firestore alih -alih database firestore nyata, atur variabel lingkungan firestore_emulator_host ke sesuatu yang tepat (biasanya, localhost: 8080). Catatan : Saat menggunakan emulator, Anda kemungkinan tidak menggunakan file google_application_credentials. Oleh karena itu, tidak ada proyek yang akan didefinisikan. Anda dapat mengatur proyek menggunakan opsi global --projectid
, jika tidak, ia akan menggunakan 'default' sebagai pengidentifikasi proyek.
fuego collections
Akan mengembalikan daftar koleksi proyek.
Anda dapat menambahkan dokumen baru, menggunakan JSON:
fuego add people ' {"name": "sergio", "age": 41} '
# Rv7ZfnLQWprdXuulqMdf <- fuego prints the ID of the newly created document
Mengambilnya, menggunakan ID:
fuego get people Rv7ZfnLQWprdXuulqMdf
# {
# "CreateTime": "2021-08-22T23:53:31.439821Z",
# "Data": {
# "age": 41,
# "name": "sergio"
# },
# "ID": "Rv7ZfnLQWprdXuulqMdf",
# "ReadTime": "2021-08-23T01:57:12.30626Z",
# "UpdateTime": "2021-08-22T23:53:31.439821Z"
# }
Atau ambilkan mereka menggunakan beberapa ID:
fuego getall people WkVlcPgEJIXzdyQS6H5d f2TbJA5DIhBfXwKrMbHP
[
# {
# "CreateTime": "2021-08-22T23:53:31.439821Z",
# "Data": {
# "age": 41,
# "name": "sergio"
# },
# "ID": "WkVlcPgEJIXzdyQS6H5d",
# "ReadTime": "2021-08-23T01:57:12.30626Z",
# "UpdateTime": "2021-08-22T23:53:31.439821Z"
# },
# {
# "CreateTime": "2021-08-22T23:53:31.439821Z",
# "Data": {
# "age": 23,
# "name": "rohan"
# },
# "ID": "f2TbJA5DIhBfXwKrMbHP",
# "ReadTime": "2021-08-23T01:57:12.30626Z",
# "UpdateTime": "2021-08-22T23:53:31.439821Z"
# }
# ]
Anda juga dapat mengganti dokumen yang ada:
fuego set people/Rv7ZfnLQWprdXuulqMdf '{"name": "sergio", "age": 42}' # It's my birthday!
CATATAN : Kami dapat menggunakan argumen collection-path document-id json-data
atau document-path json-data
. Ini juga merupakan kasus untuk perintah hapus dan get.
Baik dalam perintah add
dan set
, argumen dokumen dapat berupa string JSON (jika dimulai dengan karakter {
) atau jalur ke file JSON, yaitu:
fuego add animals ./dog.json
Untuk menghapus dokumen:
fuego delete people/Rv7ZfnLQWprdXuulqMdf
Catatan: Ini tidak akan menghapus subkoleksi apa pun di bawah dokumen.
Untuk menghapus dokumen termasuk subkoleksi, gunakan flag --recursive, -r
. Menggunakan bendera -r
juga akan menghapus dokumen yang hilang. Dokumen yang hilang adalah dokumen yang tidak ada tetapi memiliki sub-dokumen.
fuego delete -r people/Rv7ZfnLQWprdXuulqMdf
Juga dimungkinkan untuk menghapus banyak dokumen tanpa transaksi
fuego delete people Rv7ZfnLQWprdXuulqMdf,Rv7ZfnLQWprdXuulqMde
Menghapus bidang tertentu dari dokumen, -bendera --field, -f
dapat digunakan.
fuego delete people/Rv7ZfnLQWprdXuulqMdf -f age
Perintah ini akan menghapus bidang usia dari jalur ganda yang diberikan.
Untuk memperbarui dokumen yang ada:
fuego set --merge people Rv7ZfnLQWprdXuulqMdf ' {"location": "unknown"} '
# Rv7ZfnLQWprdXuulqMdf <- fuego prints the ID of the updated document
fuego get people Rv7ZfnLQWprdXuulqMdf
# {
# "CreateTime": "2021-08-22T23:53:31.439821Z",
# "Data": {
# "age": 41,
# "name": "sergio",
# "location": "unknown"
# },
# "ID": "Rv7ZfnLQWprdXuulqMdf",
# "ReadTime": "2021-08-23T01:57:12.30626Z",
# "UpdateTime": "2021-08-22T23:53:31.439821Z"
# }
Contoh kami di sini hanya menggunakan JSON dasar untuk mewakili dokumen Firestore. Namun, tipe JSON tidak cukup untuk mewakili beberapa tipe Firestore, misalnya geo-lokasi atau cap waktu.
Harap baca dokumentasi tipe jika Anda ingin tahu bagaimana fuego memetakan dokumen JSON ke dokumen firestore, dan cara mengekspresikan sistem tipe yang lebih canggih menggunakan 'json' kami yang lebih lama.
Anda dapat bekerja pada sub-koleksi menggunakan jalur lengkap dengan "/" sebagai pemisah. Misalnya:
fuego query countries/france/cities
Mari kita jelaskan pertanyaan dengan contoh. Pertama, kami akan membuat kumpulan fisika nobel laureates,
fuego add nobel ' {"name": "Arthur Ashkin", "year": 2018, "birthplace": {"country":"USA", "city": "New York"}} '
fuego add nobel ' {"name": "Gerard Mourou", "year": 2018, "birthplace": {"country":"FRA", "city": "Albertville"}} '
fuego add nobel ' {"name": "Donna Strickland", "year": 2018, "birthplace": {"country":"CAN", "city": "Guelph"}} '
fuego add nobel ' {"name": "Rainer Weiss", "year": 2017, "birthplace": {"country":"DEU", "city": "Berlin"}} '
fuego add nobel ' {"name": "Kip Thorne", "year": 2017, "birthplace": {"country":"USA", "city": "Logan"}} '
fuego add nobel ' {"name": "Barry Barish", "year": 2017, "birthplace": {"country":"USA", "city": "Omaha"}} '
fuego add nobel ' {"name": "David Thouless", "year": 2016, "birthplace": {"country":"GBR", "city": "Bearsden"}} '
Kami dapat meminta koleksi lengkapnya:
fuego query nobel
# Prints all our nobel laureates like this:
# [
# {
# "CreateTime": "2019-02-26T02:39:45.293936Z",
# "Data": {
# "birthplace": {
# "city": "Bearsden",
# "country": "GBR"
# },
# "name": "David Thouless",
# "year": 2016
# },
# "ID": "BJseSVoBatOOt8gcwZWx",
# "ReadTime": "2019-02-26T02:55:19.419627Z",
# "UpdateTime": "2019-02-26T02:39:45.293936Z"
# },
# .... etc
Yang akan mengambil dan menampilkan dokumen dalam koleksi, tanpa filter. Secara default, Fuego hanya akan mengambil 100 dokumen. Anda dapat mengubah batas menggunakan bendera --limit
.
Anda juga dapat memesan hasil menggunakan bendera --orderby
dan --orderdir
. Misalnya, untuk mengurutkan penerima Nobel kami berdasarkan negara asal, dalam urutan naik:
fuego query --orderby birthplace.country --orderdir ASC nobel
Anda dapat menambahkan filter, menggunakan operator yang didukung Firestore:
>, <, >=, <=, ==, !=, <in>, <not-in>, <array-contains> or <array-contains-any>
Anda dapat menggabungkan beberapa filter dalam satu kueri. Misalnya, untuk mendapatkan penerima Nobel 2018 dari AS:
fuego query nobel ' birthplace.country == "USA" ' ' year == 2018 '
yang akan dicetak:
[
{
"CreateTime" : " 2019-02-26T02:14:02.692077Z " ,
"Data" : {
"birthplace" : {
"city" : " New York " ,
"country" : " USA "
},
"name" : " Arthur Ashkin " ,
"year" : 2018
},
"ID" : " glHCUu7EZ3gkuDaVlXqv " ,
"ReadTime" : " 2019-02-26T03:00:15.576398Z " ,
"UpdateTime" : " 2019-02-26T02:59:55.889775Z "
}
]
Atau AS dan Jerman.
fuego query nobel ' birthplace.country <in> ["USA","DEU"] ' ' year == 2018 '
Katakanlah kita ingin menemukan Nobel paling tidak baru -baru ini dari Amerika Serikat, kita dapat menulis kueri berikut:
fuego query --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
Ups, kami mendapatkan kesalahan berikut dari server, karena kueri kami membutuhkan indeks untuk berfungsi:
rpc error: code = FailedPrecondition desc = The query requires an index.
You can create it here:
https://console.firebase.google.com/project/myproject/database/firestore/indexes?create_index=EgVub2JlbBoWChJiaXJ0aH....
Setelah membuat indeks, kami menjalankan kembali kueri dan sekarang kami mendapatkan:
[
{
"CreateTime" : " 2019-02-26T02:39:44.458647Z " ,
"Data" : {
"birthplace" : {
"city" : " Omaha " ,
"country" : " USA "
},
"name" : " Barry Barish " ,
"year" : 2017
},
"ID" : " ainH3nkOA2xusEBON2An " ,
"ReadTime" : " 2019-02-26T03:12:07.156643Z " ,
"UpdateTime" : " 2019-02-26T02:39:44.458647Z "
}
]
I Contoh -contoh kami sebelumnya, semua segmen bagian jalur dari filter berisi alfanumerik atau karakter _ dan tidak dimulai dengan angka. Ketika kondisi ini dipenuhi, mereka dapat ditulis tanpa dikutip. Kalau tidak, mereka perlu tidak dikutip.
fuego query weirdcollection ' really." ".strage." but valid ".fieldname == "even blank keys are valid" '
Adapun nilai, nilai numerik, string, boolean (benar atau salah) dan cap waktu didukung dalam filter. Contoh pertanyaan:
"Usia> = 34", "name == 'Paul'", "menikah == true", dan "ulang tahun == 1977-06-28t04: 00: 00z"
Perhatikan bahwa nilai cap waktu harus menggunakan format RFC3339 dan tidak boleh dikutip. Nilai boolean diwakili oleh string benar dan palsu yang tak terkenali.
Nilai array harus dinyatakan sebagai dalam contoh berikut. Perhatikan bahwa item dipisahkan oleh ruang:
fuego query cities ' name <in> ["bogota" "cali" "medellin"] '
Gunakan bendera -seleksi untuk secara eksplisit meminta bidang spesifik yang ingin Anda ambil (Anda dapat mendefinisikan banyak menggunakan beberapa -seleksi)
fuego query --select name --select year --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
Jika perlu, Anda dapat menggunakan parameter pagination Firestore untuk secara manual halaman melalui hasil. Menggabungkan -terbatas dengan bendera --Startat, --Startafter, --endat, dan --endbefore, yang semuanya menerima ID dokumen.
Anda dapat membuat kueri grup untuk menanyakan semua subkoleksi yang berbagi ID umum dengan menggunakan bendera -g.
fuego add cities/france/landmarks ' {"name": "The Eiffel Tower"} '
fuego add cities/sf/landmarks ' {"name": "Golden Gate Bridge"} '
fuego query -g landmarks
Penggunaan dasar
fuego copy source target
Kami dapat menyalin koleksi dan sub koleksinya
fuego copy countries/france/cities countries/germany/cities
Secara default, dokumen yang ada dalam koleksi target akan dilewati. Jika Anda ingin menimpa dokumen yang ada, cukup gunakan -overwrite
fuego copy countries/france/cities countries/germany/cities --overwrite
Juga, menggunakan bendera -Merge mari kita dapat menggunakan mode penggabungan untuk menimpa dokumen yang ada
fuego copy countries/france/cities countries/germany/cities --overwrite --merge
Kami dapat menyalin dokumen dan sub koleksi.
fuego copy countries/france countries/germany
Parameter --Merge dan --Slovwrite juga dapat digunakan untuk menentukan perilaku menyalin.
Kami mungkin memiliki Firestore di berbagai proyek Google. Kami dapat menentukan kredensial proyek sumber dengan menggunakan --src-credentials
(atau -sc
) dan kredensial proyek target dengan menggunakan --dest-credentials
(atau -dc
). Nilai default --src-credentials
dan --dest-credentials
adalah proyek kerja kami saat ini.
fuego copy countries/france countries/germany --src-credentials ./project-a-key.json --dest-credentials ./project-b-key.json --overwrite --merge
fuego copy countries/france/cities countries/germany/cities --src-credentials ./project-a-key.json --dest-credentials ./project-b-key.json
Kami juga dapat memiliki kredensial yang memiliki akses ke berbagai proyek. Kami dapat menentukan ID Proyek Sumber dengan --src-projectid
(atau -sp
) dan Target ID Proyek dengan menggunakan --dest-projectid
(atau -dp
). Nilai default dari --src-prjectid
dan --dest-prjectid
adalah ID dari proyek kerja kami saat ini.
fuego copy countries/france countries/germany --src-projectid project-a --dest-projectid project-b --overwrite --merge
fuego copy countries/france/cities countries/germany/cities --dest-projectid prject-c
Lihat file peretasan untuk beberapa panduan tentang cara berkontribusi.