Leia a documentação da versão estável se você quiser usar o Fuego
Um cliente da linha de comando Firestore.
Faça o download de um dos binários pré -compilados do último lançamento. (Construções disponíveis para Windows, Linux, Macintosh/Darwin)
Os usuários do Linux podem instalar o Fuego via Snap. No entanto, você provavelmente precisará instalá -lo usando - -devmode para que ele possa acessar seu arquivo google_application_credentials.
snap install fuego --devmode
Se você se estiver confortável em criar programas, pode construir o Fuego usando o Go:
git clone https://github.com/sgarciac/fuego.git
cd fuego
go build . # and 'go install .' if you want
./fuego --help
Você precisará de um arquivo de chave da conta de serviço para poder acessar o banco de dados do Firestore do seu projeto. Para criar um arquivo de chave privada da conta de serviço, se você não tiver um, acesse o console do projeto FireBase, as configurações do projeto e clique na guia Contas de serviço e gerar uma nova chave privada.
Depois de ter o arquivo de chave da sua conta de serviço, o Fuego poderá encontrá -lo usando uma das seguintes opções:
--credentials
toda vez que executar o Fuego, ou seja: fuego --credentials ./my-account-service-private-key.json get mycollection mydocumentid
ou
export GOOGLE_APPLICATION_CREDENTIALS=./my-account-service-private-key.json
fuego get mycollection mydocumentid
Os bancos de dados do Firestore pertencem a projetos. O arquivo de credenciais do aplicativo do Google geralmente define o projeto em que o Firestore funcionará. No entanto, você pode, se necessário, definir o projeto usando a opção global --projectid
.
Se você precisar usar o Fuego com o emulador Firestore em vez de um banco de dados real do Firestore, defina a variável de ambiente Firestore_emulator_host para algo apropriado (geralmente, localhost: 8080). Nota : Ao usar o emulador, você provavelmente não está usando um arquivo google_application_credentials. Portanto, nenhum projeto será definido. Você pode definir um projeto usando a opção global --projectid
, caso contrário, ele usará 'padrão' como identificador do projeto.
fuego collections
Retornará a lista das coleções do projeto.
Você pode adicionar novos documentos, usando o JSON:
fuego add people ' {"name": "sergio", "age": 41} '
# Rv7ZfnLQWprdXuulqMdf <- fuego prints the ID of the newly created document
De buscá -los, usando o 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"
# }
Ou buscá -los usando vários IDs:
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"
# }
# ]
Você também pode substituir um documento existente:
fuego set people/Rv7ZfnLQWprdXuulqMdf '{"name": "sergio", "age": 42}' # It's my birthday!
NOTA : Podemos usar o collection-path document-id json-data
ou document-path json-data
. Este também é o caso dos comandos Excluir e Get.
Nos comandos add
e set
, o argumento do documento pode ser uma string json (se ele começar com o caractere {
) ou um caminho para um arquivo json, ou seja:
fuego add animals ./dog.json
Para excluir um documento:
fuego delete people/Rv7ZfnLQWprdXuulqMdf
NOTA: Isso não excluirá nenhuma subconscisão no documento.
Para excluir um documento, incluindo subconsções, use o sinalizador --recursive, -r
. O uso do sinalizador -r
também excluirá documentos ausentes. Um documento ausente é um documento que não existe, mas tem subdocumentos.
fuego delete -r people/Rv7ZfnLQWprdXuulqMdf
Também é possível excluir vários documentos sem transação
fuego delete people Rv7ZfnLQWprdXuulqMdf,Rv7ZfnLQWprdXuulqMde
Excluindo um campo específico de um documento, o sinalizador --field, -f
pode ser usado.
fuego delete people/Rv7ZfnLQWprdXuulqMdf -f age
Este comando excluirá o campo de idade do caminho de dupla dado.
Para atualizar um documento existente:
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"
# }
Nossos exemplos aqui usam apenas JSON básico para representar documentos da Firestore. No entanto, os tipos JSON não são suficientes para representar alguns tipos de Firestore, por exemplo, locações geográficas ou registros de data e hora.
Leia os tipos de documentação se quiser saber como o Fuego mapeia os documentos JSON para os documentos da Firestore e como expressar o sistema de tipo mais avançado usando nosso 'JSON estendido'.
Você pode trabalhar em subcolções usando o caminho completo com "/" s como separadores. Por exemplo:
fuego query countries/france/cities
Vamos explicar as consultas pelo exemplo. Primeiro, criaremos uma coleção de Physics 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"}} '
Podemos consultar a coleção completa:
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
Que buscarão e exibirão os documentos da coleção, sem filtro. Por padrão, o Fuego buscará apenas 100 documentos. Você pode alterar o limite usando o sinalizador --limit
.
Você também pode solicitar os resultados usando os sinalizadores --orderby
e --orderdir
. Por exemplo, para classificar nossos ganhadores do Nobel por país de origem, em ordem ascendente:
fuego query --orderby birthplace.country --orderdir ASC nobel
Você pode adicionar filtros, usando os operadores apoiados pela Firestore:
>, <, >=, <=, ==, !=, <in>, <not-in>, <array-contains> or <array-contains-any>
Você pode combinar vários filtros em uma única consulta. Por exemplo, para obter o Nobel de 2018 dos EUA:
fuego query nobel ' birthplace.country == "USA" ' ' year == 2018 '
que imprimirá:
[
{
"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 "
}
]
Ou EUA e Alemanha.
fuego query nobel ' birthplace.country <in> ["USA","DEU"] ' ' year == 2018 '
Digamos que queremos encontrar o Nobel menos recente dos EUA, podemos escrever a seguinte consulta:
fuego query --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
Opa, recebemos o seguinte erro do servidor, porque nossa consulta precisa de um índice para funcionar:
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....
Depois de criar o índice, executamos novamente a consulta e agora obtemos:
[
{
"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 "
}
]
Nos nossos exemplos anteriores, todos os segmentos da parte do caminho de um filtro continham alfanumérico ou o caractere _ e não começaram com um número. Quando essas condições forem atendidas, elas podem ser escritas sem dúvida. Caso contrário, eles precisam ser inaltados.
fuego query weirdcollection ' really." ".strage." but valid ".fieldname == "even blank keys are valid" '
Quanto aos valores, os valores numéricos, string, booleanos (verdadeiros ou falsos) e registradores de data e hora são suportados nos filtros. Exemplos de consultas:
"Idade> = 34", "Nome == 'Paul'", "Casado == True" e "Aniversário == 1977-06-28T04: 00: 00Z"
Observe que os valores dos registros de data e hora devem usar o formato RFC3339 e não devem ser citados. Os valores booleanos são representados pelas cordas verdadeiras e falsas não citadas.
Os valores das matrizes devem ser expressos como no exemplo a seguir. Observe que os itens são separados pelo espaço:
fuego query cities ' name <in> ["bogota" "cali" "medellin"] '
Use a bandeira - -Select para pedir explicitamente os campos específicos que você deseja ser recuperado (você pode definir muitos usando vários -seleção)
fuego query --select name --select year --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
Se necessário, você pode usar os parâmetros de paginação Firestore para organizar manualmente os resultados. Combinando -limite com as bandeiras - -startat, - -startafter, --endat e -endBe, que aceitam o ID de um documento.
Você pode fazer consultas de grupo para consultar todas as subconsções compartilhando um ID comum usando o sinalizador -g.
fuego add cities/france/landmarks ' {"name": "The Eiffel Tower"} '
fuego add cities/sf/landmarks ' {"name": "Golden Gate Bridge"} '
fuego query -g landmarks
Uso básico
fuego copy source target
Podemos copiar uma coleção e suas sub -coleções
fuego copy countries/france/cities countries/germany/cities
Por padrão, os documentos existentes na coleta de destino serão ignorados. Se você deseja substituir o documento existente, basta usar --Overwrite
fuego copy countries/france/cities countries/germany/cities --overwrite
Além disso, usando a bandeira -Merge, vamos usar o modo de fusão para substituir os documentos existentes
fuego copy countries/france/cities countries/germany/cities --overwrite --merge
Podemos copiar um documento e suas sub -coleções.
fuego copy countries/france countries/germany
Parâmetros -Merge e --OverWrite também podem ser usados para especificar o comportamento de cópia.
Podemos ter o Firestore em diferentes projetos do Google. Podemos especificar a credencial do projeto de origem usando --src-credentials
(ou -sc
) e a credencial do projeto de destino usando --dest-credentials
(ou -dc
). O valor padrão dos --src-credentials
e --dest-credentials
é o nosso projeto de trabalho atual.
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
Também podemos ter uma credencial que tenha acesso a diferentes projetos. Podemos especificar o ID do projeto de origem por --src-projectid
(ou -sp
) e ID do projeto de destino usando --dest-projectid
(ou -dp
). O valor padrão do --src-prjectid
e --dest-prjectid
é o ID do nosso projeto de trabalho atual.
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
Consulte o arquivo de hackers para obter algumas orientações sobre como contribuir.