Fuegoのみを使用したい場合は、安定したバージョンのドキュメントをお読みください
コマンドラインファイアストアクライアント。
最新リリースからプレリコンパイルされたバイナリの1つをダウンロードしてください。 (Windows、Linux、Macintosh/Darwinで利用可能なビルド)
Linuxユーザーは、SNAPでFuegoをインストールできます。ただし、Google_Application_credentialsファイルにアクセスできるように、-devmodeを使用してインストールする必要があります。
snap install fuego --devmode
プログラムを快適に構築している場合は、Goを使用してFuegoを自分で構築できます。
git clone https://github.com/sgarciac/fuego.git
cd fuego
go build . # and 'go install .' if you want
./fuego --help
プロジェクトのFirestoreデータベースにアクセスできるようにするには、サービスアカウントキーファイルが必要です。 Serviceアカウントの秘密キーファイルを作成するには、FireBaseプロジェクトコンソールに移動してから、 [設定]をプロジェクトに移動し、 [サービスアカウント]タブをクリックして、新しいプライベートキーを生成します。
サービスアカウントキーファイルを取得すると、Fuegoは次のオプションのいずれかを使用してそれを見つけることができます。
--credentials
フラグを使用してください。 fuego --credentials ./my-account-service-private-key.json get mycollection mydocumentid
または
export GOOGLE_APPLICATION_CREDENTIALS=./my-account-service-private-key.json
fuego get mycollection mydocumentid
Firestoreデータベースはプロジェクトに属します。 Googleアプリケーション資格情報ファイルは通常、Firestoreが取り組むプロジェクトを定義します。ただし、必要に応じて、グローバルオプション--projectid
使用してプロジェクトを定義できます。
実際のFirestoreデータベースの代わりにFuegoを使用してFuegoを使用する必要がある場合は、Firestore_emulator_host環境変数を適切なものに設定します(通常、LocalHost:8080)。注:エミュレータを使用する場合、Google_Application_credentialsファイルを使用していない可能性があります。したがって、プロジェクトは定義されません。グローバルオプション--projectid
を使用してプロジェクトを設定できます。そうしないと、プロジェクト識別子として「デフォルト」を使用します。
fuego collections
プロジェクトのコレクションのリストを返します。
JSONを使用して、新しいドキュメントを追加できます。
fuego add people ' {"name": "sergio", "age": 41} '
# Rv7ZfnLQWprdXuulqMdf <- fuego prints the ID of the newly created document
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"
# }
または、複数の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"
# }
# ]
既存のドキュメントを置き換えることもできます。
fuego set people/Rv7ZfnLQWprdXuulqMdf '{"name": "sergio", "age": 42}' # It's my birthday!
注:引数collection-path document-id json-data
またはdocument-path json-data
を使用できます。これは、削除とGETコマンドの場合にも当てはまります。
add
およびset
コマンドの両方で、ドキュメント引数はJSON文字列(文字{
)から始まる場合、またはJSONファイルへのパス、つまり:
fuego add animals ./dog.json
ドキュメントを削除するには:
fuego delete people/Rv7ZfnLQWprdXuulqMdf
注:これは、ドキュメントの下でサブコレクションを削除しません。
サブコレクションを含むドキュメントを削除するには、 --recursive, -r
フラグを使用します。 -r
フラグを使用すると、欠落しているドキュメントも削除されます。不足しているドキュメントは、存在しないがサブドキュメントがあるドキュメントです。
fuego delete -r people/Rv7ZfnLQWprdXuulqMdf
トランザクションなしで複数のドキュメントを削除することもできます
fuego delete people Rv7ZfnLQWprdXuulqMdf,Rv7ZfnLQWprdXuulqMde
ドキュメントの特定のフィールドを削除すると、 --field, -f
フラグを使用できます。
fuego delete people/Rv7ZfnLQWprdXuulqMdf -f age
このコマンドは、与えられたダブルメントパスから年齢フィールドを削除します。
既存のドキュメントを更新するには:
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"
# }
ここでの私たちの例は、ファイヤーストア文書を表すために基本的なJSONのみを使用しています。ただし、JSONのタイプは、たとえば地理ロケーションやタイムスタンプなど、いくつかのファイヤーストアタイプを表すのに十分ではありません。
FuegoがJSONドキュメントをFirestoreドキュメントにマップする方法と、「拡張されたJSON」を使用してより高度なタイプシステムを表現する方法を知りたい場合は、タイプのドキュメントをお読みください。
「/」は「/」を分離器として使用して、サブコレクションに取り組むことができます。例えば:
fuego query countries/france/cities
例でクエリを説明しましょう。まず、ノーベル賞受賞物の物理学のコレクションを作成します。
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"}} '
完全なコレクションを照会できます。
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
コレクション内のドキュメントを取得して表示します。デフォルトでは、Fuegoは100個のドキュメントのみを取得します。 --limit
フラグを使用して制限を変更できます。
また、 --orderby
および--orderdir
フラグを使用して結果を注文することもできます。たとえば、昇順でノーベル賞受賞者を原産国ごとに並べ替えるには:
fuego query --orderby birthplace.country --orderdir ASC nobel
Firestoreサポートされているオペレーターを使用して、フィルターを追加できます。
>, <, >=, <=, ==, !=, <in>, <not-in>, <array-contains> or <array-contains-any>
1つのクエリで複数のフィルターを組み合わせることができます。たとえば、2018年のノーベル賞受賞者をアメリカから入手するには:
fuego query nobel ' birthplace.country == "USA" ' ' year == 2018 '
印刷します:
[
{
"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 "
}
]
またはアメリカとドイツ。
fuego query nobel ' birthplace.country <in> ["USA","DEU"] ' ' year == 2018 '
米国から最も最近のノーベルを見つけたいと思ったとしましょう。次の質問を書くことができます。
fuego query --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
おっと、クエリが機能するにはインデックスが必要なため、サーバーから次のエラーが発生します。
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....
インデックスを作成した後、クエリを再実行し、次のことを取得します。
[
{
"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以前の例では、フィルターのパス部分のすべてのセグメントには英数字または_文字が含まれており、数で始まりませんでした。この条件が満たされると、それらは引用されていないと書くことができます。そうでなければ、それらは引用されていない必要があります。
fuego query weirdcollection ' really." ".strage." but valid ".fieldname == "even blank keys are valid" '
値については、数値、文字列、ブール(真または偽)、およびタイムスタンプの値がフィルターでサポートされています。クエリの例:
「age> = 34」、「name == 'paul' "、" married == true "、および「誕生日== 1977-06-28T04:00:00Z」
タイムスタンプの値はRFC3339形式を使用する必要があり、引用しないでください。ブール値は、引用されていない真の誤った文字列によって表されます。
次の例のように、配列値を表す必要があります。アイテムはスペースによって区切られていることに注意してください。
fuego query cities ' name <in> ["bogota" "cali" "medellin"] '
-選択したフラグを使用して、検索したい特定のフィールドを明示的に要求します(いくつかの - 選択を使用して多くを定義できます)
fuego query --select name --select year --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
必要に応じて、Firestore Paginationパラメーターを使用して、結果を手動でページできます。 -startat、-startat、 - startafter、 - endat、およびendbeyted foreと - flags -startat、-startat、startat、nedtar -endtaはすべて、ドキュメントのIDを組み合わせて組み合わせています。
グループクエリを作成して、-gフラグを使用して共通IDを共有するすべてのサブコレクションを照会できます。
fuego add cities/france/landmarks ' {"name": "The Eiffel Tower"} '
fuego add cities/sf/landmarks ' {"name": "Golden Gate Bridge"} '
fuego query -g landmarks
基本的な使用法
fuego copy source target
コレクションとそのサブコレクションをコピーできます
fuego copy countries/france/cities countries/germany/cities
デフォルトでは、ターゲットコレクションの既存のドキュメントがスキップされます。既存のドキュメントを上書きしたい場合は、使用するだけです - オーバーライター
fuego copy countries/france/cities countries/germany/cities --overwrite
また、flag -mergeを使用して、マージモードを使用して既存のドキュメントを上書きすることができます
fuego copy countries/france/cities countries/germany/cities --overwrite --merge
ドキュメントとそのサブコレクションをコピーできます。
fuego copy countries/france countries/germany
パラメーター-Mergeおよび-Overwriteを使用して、コピー動作を指定することもできます。
さまざまなGoogleプロジェクトにファイアストアがあるかもしれません。 --src-credentials
(または-sc
)およびターゲットプロジェクトの資格情報を使用して、 --dest-credentials
(または-dc
)を使用して、ソースプロジェクトの資格情報を指定できます。 --src-credentials
および--dest-credentials
のデフォルト値は、現在の作業プロジェクトです。
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
また、さまざまなプロジェクトにアクセスできる資格情報がある場合があります。 --dest-projectid
(または-dp
)を使用して、 --src-projectid
(または-sp
)およびターゲットプロジェクトIDによってソースプロジェクトIDを指定できます。 --src-prjectid
および--dest-prjectid
のデフォルト値は、現在の作業プロジェクトのIDです。
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
貢献方法に関するガイダンスについては、ハッキングファイルを参照してください。