Fuego 만 사용하려면 안정적인 버전 문서를 읽으십시오.
명령 줄 Firestore 클라이언트.
최신 릴리스에서 사전 컴파일 된 바이너리 중 하나를 다운로드하십시오. (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 데이터베이스에 액세스하려면 서비스 계정 키 파일이 필요합니다. 서비스 계정 개인 키 파일이없는 경우 FireBase Project 콘솔로 이동 한 다음 프로젝트 설정을 한 다음 서비스 계정 탭을 클릭하여 새 개인 키를 생성하십시오.
서비스 계정 키 파일이 있으면 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 데이터베이스 대신 Firestore 에뮬레이터와 함께 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"
# }
여기서 우리의 예는 Firestore 문서를 나타내는 기본 JSON 만 사용합니다. 그러나 JSON 유형은 일부 FIRESTORE 유형 (예 : GEO-LOCATION 또는 TIMESTAMPS)을 나타 내기에 충분하지 않습니다.
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
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" '
값은 숫자, 문자열, 부울 (True 또는 False) 및 타임 스탬프 값이 필터에서 지원됩니다. 쿼리의 예 :
"Age> = 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 Pagination 매개 변수를 사용하여 결과를 통해 수동으로 페이지를 페이지에 넣을 수 있습니다. -limit과 깃발을 결합하여 -스타트 타트, -스타 터프터, -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
기본적으로 대상 컬렉션의 기존 문서가 건너 뜁니다. 기존 문서를 덮어 쓰려면 사용하기 만하면됩니다.
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 프로젝트에 Firestore가있을 수 있습니다. --src-credentials
(또는 -sc
)를 사용하여 소스 프로젝트 자격 증명을 지정하고 --dest-credentials
(또는 -dc
)를 사용하여 대상 프로젝트 자격 증명을 지정할 수 있습니다. --src-credentials
and --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
기여 방법에 대한 지침은 해킹 파일을 참조하십시오.