โปรดอ่านเอกสารเวอร์ชันที่เสถียรหากคุณต้องการใช้ Fuego เท่านั้น
ไคลเอ็นต์ Firestore คำสั่ง
ดาวน์โหลดหนึ่งในไบนารีที่รวบรวมไว้ล่วงหน้าจากรุ่นล่าสุด (สร้างสำหรับ Windows, Linux, Macintosh/Darwin)
ผู้ใช้ Linux สามารถติดตั้ง Fuego ผ่าน SNAP อย่างไรก็ตามคุณอาจต้องติดตั้งโดยใช้ -รหัสเพื่อให้สามารถเข้าถึงไฟล์ google_application_credentials ของคุณ
snap install fuego --devmode
หากคุณเป็นโปรแกรมการสร้างที่สะดวกสบายคุณสามารถสร้าง Fuego ด้วยตัวเองโดยใช้ GO:
git clone https://github.com/sgarciac/fuego.git
cd fuego
go build . # and 'go install .' if you want
./fuego --help
คุณจะต้องมีไฟล์คีย์บัญชีบริการเพื่อให้สามารถเข้าถึงฐานข้อมูล Firestore ของโครงการของคุณ หากต้องการสร้างไฟล์คีย์ส่วนตัวบัญชีบริการหากคุณไม่มีไฟล์ให้ไปที่คอนโซลโครงการ Firebase ของคุณจากนั้น การตั้งค่าโครงการ แล้วคลิกที่แท็บ บัญชีบริการ และสร้างคีย์ส่วนตัวใหม่
เมื่อคุณมีไฟล์คีย์บัญชีบริการแล้ว Fuego จะสามารถค้นหาได้โดยใช้หนึ่งในตัวเลือกต่อไปนี้:
--credentials
ทุกครั้งที่คุณเรียกใช้ Fuego เช่น: 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 Emulator แทนฐานข้อมูล 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
หมายเหตุ: สิ่งนี้จะไม่ลบ subcollections ใด ๆ ภายใต้เอกสาร
ในการลบเอกสารรวมถึง subcollections ให้ใช้ --recursive, -r
flag การใช้ธง -r
จะลบเอกสารที่หายไป เอกสารที่ขาดหายไปคือเอกสารที่ไม่มีอยู่ แต่มีเอกสารย่อย
fuego delete -r people/Rv7ZfnLQWprdXuulqMdf
นอกจากนี้ยังเป็นไปได้ที่จะลบเอกสารหลายเอกสารโดยไม่ทำธุรกรรม
fuego delete people Rv7ZfnLQWprdXuulqMdf,Rv7ZfnLQWprdXuulqMde
การลบฟิลด์เฉพาะของเอกสาร --field, -f
FLAG สามารถใช้งานได้
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 พื้นฐานเพื่อแสดงเอกสาร Firestore อย่างไรก็ตามประเภท JSON นั้นไม่เพียงพอที่จะเป็นตัวแทนของ Firestore บางประเภทเช่นการเชื่อมต่อทางภูมิศาสตร์หรือการประทับเวลา
โปรดอ่านเอกสารประเภทหากคุณต้องการทราบว่า Fuego Maps เอกสาร JSON ไปยังเอกสาร Firestore อย่างไรและวิธีการแสดงระบบประเภทขั้นสูงมากขึ้นโดยใช้ 'Extended 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
คุณสามารถเพิ่มตัวกรองโดยใช้ผู้ให้บริการที่รองรับ Firestore:
>, <, >=, <=, ==, !=, <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" '
สำหรับค่าตัวเลขตัวเลขสตริงบูลีน (จริงหรือเท็จ) และค่าการประทับเวลาได้รับการสนับสนุนในตัวกรอง ตัวอย่างของการสอบถาม:
"อายุ> = 34", "name == 'Paul'", "แต่งงาน == 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 เพื่อหน้าด้วยตนเองผ่านผลลัพธ์ การรวม -จำกัด กับธง -startat, -startafter, -endat และ -endbefore ซึ่งทั้งหมดยอมรับรหัสของเอกสาร
คุณสามารถทำการสืบค้นกลุ่มเพื่อสอบถาม subcollection ทั้งหมดที่แชร์ ID ทั่วไปโดยใช้ค่าสถานะ -G
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
พารามิเตอร์ -เมอร์จและ -overwrite ยังสามารถใช้เพื่อระบุพฤติกรรมการคัดลอก
เราอาจมี Firestore ในโครงการ 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
เราอาจมีข้อมูลรับรองที่สามารถเข้าถึงโครงการต่าง ๆ ได้ เราสามารถระบุรหัสโครงการต้นทางได้โดย --src-projectid
(หรือ -sp
) และรหัสโครงการเป้าหมายโดยใช้ --dest-projectid
(หรือ -dp
) ค่าเริ่มต้นของ --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
ดูไฟล์แฮ็คสำหรับคำแนะนำเกี่ยวกับวิธีการมีส่วนร่วม