Пожалуйста, прочитайте документацию по стабильной версии, если вы хотите использовать Fuego
Клиент Firestore Command-Line.
Загрузите одно из предварительно скомпилированных двоичных файлов из последнего релиза. (сборка доступна для Windows, Linux, Macintosh/Darwin)
Пользователи Linux могут установить Fuego через Snap. Тем не менее, вам, вероятно, необходимо установить его, используя -DevMode, чтобы он мог получить доступ к вашему файлу 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, а затем нажмите настройки проекта , а затем нажмите на вкладку Service Accounts и генерируйте новый закрытый ключ.
После того, как у вас есть файл ключа учетной записи службы, 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 вместо реальной базы данных 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
Извлечь их, используя идентификатор:
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"
# }
Или принести их с помощью нескольких идентификаторов:
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
. Это также относится к командам Delete и 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 для представления документов Firestore. Тем не менее, типов JSON недостаточно для представления некоторых типов Firestore, например, геоизирования или временных метров.
Пожалуйста, прочитайте документацию типов, если вы хотите узнать, как карты Fuego Maps 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) и значений TimeStamp поддерживаются в фильтрах. Примеры запросов:
"AGE> = 34", "имя == 'paul'", "женат == true" и "день рождения == 1977-06-28t04: 00: 00Z"
Обратите внимание, что значения временных метков должны использовать формат RFC3339 и не должны цитироваться. Логические значения представлены некотированными истинными и ложными строками.
Значения массива должны быть выражены, как в следующем примере. Обратите внимание, что предметы разделены по космосу:
fuego query cities ' name <in> ["bogota" "cali" "medellin"] '
Используйте флаг -селек, чтобы явно попросить конкретные поля, которые вы хотите получить (вы можете определить многих, используя несколько -SELECT)
fuego query --select name --select year --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
При необходимости вы можете использовать параметры страниц Firestore, чтобы вручную страдать через результаты. Объединение - -лимит с флагами -Startat, -startafter, -Endat и -endbefore, которые принимают идентификатор документа.
Вы можете сделать групповые запросы, чтобы запросить все подколлекции, разделяющие общий идентификатор, используя флаг -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
По умолчанию существующие документы в коллекции Target будут пропущены. Если вы хотите перезаписать существующий документ, просто используйте -выписывайте
fuego copy countries/france/cities countries/germany/cities --overwrite
Кроме того, использование Flag -Merge Let Gils сможет использовать режим слияния для перезаписи существующих документов
fuego copy countries/france/cities countries/germany/cities --overwrite --merge
Мы можем скопировать документ и его подборки.
fuego copy countries/france countries/germany
Параметры -Merge и -Overwrite также могут использоваться для указания поведения копирования.
У нас может быть Firestore в разных проектах Google. Мы можем указать учетные данные Source Project с использованием --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
является идентификатором нашего текущего рабочего проекта.
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
Смотрите файл взлома для некоторого руководства о том, как внести свой вклад.