如果您只想使用fuego,請閱讀穩定版本文檔
命令行firestore客戶端。
從最新版本中下載預編譯的二進製文件之一。 (可用於Windows,Linux,Macintosh/Darwin的構建)
Linux用戶可以通過SNAP安裝Fuego。但是,您可能需要使用-devmode將其安裝,以便它能夠訪問您的Google_application_credentials文件。
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數據庫。要創建一個服務帳戶的私有密鑰文件,如果您沒有一個文件,請轉到您的Firebase Project Console,然後進行項目設置,然後單擊“服務帳戶”選項卡並生成新的私有密鑰。
擁有服務帳戶密鑰文件後,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
來定義項目。
如果您需要將Fuego與Firestore模擬器一起使用而不是真實的Firestore數據庫,請將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
此命令將從給定的doument路徑中刪除年齡字段。
更新現有文檔:
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代表Firestore文檔。但是,JSON類型不足以代表一些Firestore類型,例如地理位置或時間戳。
如果您想知道Fuego如何將JSON文檔映射到Firestore文檔,以及如何使用我們的“擴展JSON”表達更高級的類型系統,請閱讀類型文檔。
您可以使用“/” s作為分離器的完整路徑來處理子收集。例如:
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
您可以使用支持的操作員添加過濾器:
>, <, >=, <=, ==, !=, <in>, <not-in>, <array-contains> or <array-contains-any>
您可以將幾個過濾器組合在一個查詢中。例如,要獲得美國的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 "
}
]
我以前的示例,濾波器的所有路徑部分的段中包含字母數字或_字符,並且沒有以數字開頭。當滿足這種情況時,它們可以無名。否則,他們需要無名。
fuego query weirdcollection ' really." ".strage." but valid ".fieldname == "even blank keys are valid" '
至於值,在過濾器中支持數字,字符串,布爾值(true或fals或fals)和時間戳值。查詢示例:
“ age> = 34”,“ name =='paul'”,“已婚== true”和“生日== 1977-06-28T04:00: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分頁參數通過結果手動頁面。將限制與標誌結合 - startat,-startafter,-endat和 - endbefore,它們都接受文檔的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
默認情況下,將跳過目標收集中的現有文檔。如果要覆蓋現有文檔,只需使用-OverWrite
fuego copy countries/france/cities countries/germany/cities --overwrite
另外,使用標誌 - 雜貨讓我們可以使用合併模式覆蓋現有文檔
fuego copy countries/france/cities countries/germany/cities --overwrite --merge
我們可以復製文檔及其子集合。
fuego copy countries/france countries/germany
參數-Merge和-overWrite也可以用於指定複製行為。
我們可能在不同的Google項目中有Firestore。我們可以使用--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
--src-projectid
或-dp
)指定源項目ID(或-sp
)和目標項目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
有關如何貢獻的指南,請參見黑客文件。