Bitte lesen Sie die stabile Versionsdokumentation, wenn Sie nur Fuego verwenden möchten
Ein Befehlszeilen-Firestore-Client.
Laden Sie eine der vorkompilierten Binärdateien aus der neuesten Version herunter. (Erstellt für Windows, Linux, Macintosh/Darwin)
Linux -Benutzer können Fuego über SNAP installieren. Sie müssen es jedoch wahrscheinlich mithilfe von -DevMode installieren, damit es auf Ihre Datei Google_Application_credentials zugreifen kann.
snap install fuego --devmode
Wenn Sie sich bequemer Bauprogramme bequem machen, können Sie Fuego selbst mit GO erstellen:
git clone https://github.com/sgarciac/fuego.git
cd fuego
go build . # and 'go install .' if you want
./fuego --help
Sie benötigen eine Service -Konto -Schlüsseldatei, um auf die Firestore -Datenbank Ihres Projekts zugreifen zu können. Um eine private Schlüsseldatei für das Servicekonto zu erstellen, wenden Sie sich an Ihre Firebase -Projektkonsole , projizieren Sie dann auf die Registerkarte "Service -Konten" und erstellen Sie einen neuen privaten Schlüssel.
Sobald Sie Ihre Service -Konto -Schlüsseldatei haben, kann Fuego sie mit einer der folgenden Optionen finden:
--credentials
, wenn Sie Fuego ausführen, dh: fuego --credentials ./my-account-service-private-key.json get mycollection mydocumentid
oder
export GOOGLE_APPLICATION_CREDENTIALS=./my-account-service-private-key.json
fuego get mycollection mydocumentid
Firestore -Datenbanken gehören zu Projekten. In der Datei "Google Application" -Datei wird normalerweise das Projekt definiert, an dem Firestore arbeitet. Bei Bedarf können Sie das Projekt jedoch mit der globalen Option --projectid
-definieren.
Wenn Sie Fuego mit dem Firestore -Emulator anstelle einer realen Firestore -Datenbank verwenden müssen, setzen Sie die Umgebungsvariable von Firestore_Emulator_Host auf etwas Angemessenes (normalerweise Localhost: 8080). Hinweis : Wenn Sie den Emulator verwenden, verwenden Sie wahrscheinlich keine Datei google_application_credentials. Daher wird kein Projekt definiert. Sie können ein Projekt mit der globalen Option festlegen --projectid
, ansonsten wird es "Standard" als Projektkennung verwendet.
fuego collections
Wird die Liste der Projektkollektionen zurückgeben.
Sie können neue Dokumente mit JSON hinzufügen:
fuego add people ' {"name": "sergio", "age": 41} '
# Rv7ZfnLQWprdXuulqMdf <- fuego prints the ID of the newly created document
Von ihnen abzurufen, mit der 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"
# }
Oder holen Sie sie mit mehreren 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"
# }
# ]
Sie können auch ein vorhandenes Dokument ersetzen:
fuego set people/Rv7ZfnLQWprdXuulqMdf '{"name": "sergio", "age": 42}' # It's my birthday!
Hinweis : Wir können entweder die Argumente collection-path document-id json-data
oder document-path json-data
verwenden. Dies ist auch bei den Befehlen löschlich und gettet.
Sowohl in den Befehlen add
als auch set
kann das Dokumentargument entweder eine JSON -Zeichenfolge sein (wenn es mit dem Zeichen {
) oder einem Pfad zu einer JSON -Datei beginnt, dh:
fuego add animals ./dog.json
Um ein Dokument zu löschen:
fuego delete people/Rv7ZfnLQWprdXuulqMdf
HINWEIS: Dies löscht keine Unterkollektionen im Dokument.
Verwenden Sie zum Löschen eines Dokuments mit Unterkollektionen das --recursive, -r
-Flag. Mit dem Flag -r
-Flag löscht auch fehlende Dokumente. Ein fehlendes Dokument ist ein Dokument, das nicht vorhanden ist, aber Unterdokumente enthält.
fuego delete -r people/Rv7ZfnLQWprdXuulqMdf
Es ist auch möglich, mehrere Dokumente ohne Transaktion zu löschen
fuego delete people Rv7ZfnLQWprdXuulqMdf,Rv7ZfnLQWprdXuulqMde
Wenn Sie ein bestimmtes Feld eines Dokuments löschen, kann das --field, -f
-Flag verwendet werden.
fuego delete people/Rv7ZfnLQWprdXuulqMdf -f age
Dieser Befehl löscht das Altersfeld aus dem angegebenen Doppelpfad.
So aktualisieren Sie ein vorhandenes Dokument:
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"
# }
Unsere Beispiele hier verwenden nur Basic JSON, um Firestore -Dokumente darzustellen. JSON-Typen reichen jedoch nicht aus, um einige Firestore-Typen darzustellen, beispielsweise Geo-Lokationen oder Zeitstempel.
Bitte lesen Sie die Dokumentation der Typen, wenn Sie wissen möchten, wie Fuego JSON -Dokumente in Firestore -Dokumente beinhalten und wie Sie das fortschrittlichere System mit unserem "erweiterten JSON" ausdrücken.
Sie können mit dem vollständigen Pfad mit "/" als Trennzeichen an Unterkollegen arbeiten. Zum Beispiel:
fuego query countries/france/cities
Erläutern wir Abfragen mit gutem Beispielsweise. Zunächst erstellen wir eine Sammlung von Nobelpreisträgern von Physik,
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"}} '
Wir können die vollständige Sammlung abfragen:
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
Die die Dokumente in der Sammlung abholen und angezeigt werden. Standardmäßig holt Fuego nur 100 Dokumente ab. Sie können die Grenze mit der Flagge --limit
ändern.
Sie können die Ergebnisse auch mit den Flaggen --orderby
und --orderdir
bestellen. Zum Beispiel, um unsere Nobelpreisträger nach Herkunftsland in aufsteigender Reihenfolge zu sortieren:
fuego query --orderby birthplace.country --orderdir ASC nobel
Sie können Filter mit den von FireStore unterstützten Betreibern hinzufügen:
>, <, >=, <=, ==, !=, <in>, <not-in>, <array-contains> or <array-contains-any>
Sie können mehrere Filter in einer einzelnen Abfrage kombinieren. Zum Beispiel, um den Nobelpreisträger 2018 aus den USA zu erhalten:
fuego query nobel ' birthplace.country == "USA" ' ' year == 2018 '
die drucken:
[
{
"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 "
}
]
Oder USA und Deutschland.
fuego query nobel ' birthplace.country <in> ["USA","DEU"] ' ' year == 2018 '
Nehmen wir an, wir möchten den kürzlich am wenigsten aus den USA finden, wir können die folgende Anfrage schreiben:
fuego query --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
Hoppla, wir erhalten den folgenden Fehler vom Server, da unsere Abfrage einen Index benötigt, um zu funktionieren:
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....
Nachdem wir den Index erstellt haben, führen wir die Abfrage noch einmal aus und jetzt erhalten wir:
[
{
"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 "
}
]
I In unseren früheren Beispielen enthielt alle Segmente des Pfadteils eines Filters einen alphanumerischen oder das _ Charakter und begannen nicht mit einer Zahl. Wenn diese Bedingungen erfüllt sind, können sie nicht eingestuft werden. Ansonsten müssen sie nicht zeigten.
fuego query weirdcollection ' really." ".strage." but valid ".fieldname == "even blank keys are valid" '
Was Werte betrifft, werden numerische, String-, Boolean- (True oder False) und Zeitstempelwerte in Filtern unterstützt. Beispiele für Fragen:
"Alter> = 34", "Name == 'Paul'", "verheiratet == True" und "Birday == 1977-06-28T04: 00: 00Z"
Beachten Sie, dass Zeitstempelwerte das Format RFC3339 verwenden und nicht angegeben werden sollten. Boolesche Werte werden durch die nicht zahlreichen wahren und falschen Saiten dargestellt.
Arrays -Werte sollten wie im folgenden Beispiel ausgedrückt werden. Beachten Sie, dass Elemente durch den Raum getrennt sind:
fuego query cities ' name <in> ["bogota" "cali" "medellin"] '
Verwenden Sie das Flag -ausgewählte Flag, um die spezifischen Felder, die Sie abrufen möchten, explizit zu fragen (Sie können viele mit mehreren -Auswahl definieren).
fuego query --select name --select year --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
Bei Bedarf können Sie die Firestore -Paginationsparameter verwenden, um durch die Ergebnisse manuell zu werden. Kombinieren Sie -mit den Flaggen -startat, -startafter, --endat und --endbevor, die alle die ID eines Dokuments akzeptieren.
Sie können Gruppenanfragen vornehmen, um alle Unterkopplungen abzufragen, die eine gemeinsame ID teilen, indem Sie das -g -Flag verwenden.
fuego add cities/france/landmarks ' {"name": "The Eiffel Tower"} '
fuego add cities/sf/landmarks ' {"name": "Golden Gate Bridge"} '
fuego query -g landmarks
Grundnutzung
fuego copy source target
Wir können eine Sammlung und ihre Untersammlungen kopieren
fuego copy countries/france/cities countries/germany/cities
Standardmäßig werden vorhandene Dokumente in der Zielsammlung übersprungen. Wenn Sie das vorhandene Dokument überschreiben möchten, verwenden Sie einfach -Overwrite
fuego copy countries/france/cities countries/germany/cities --overwrite
Mit Flag -Merge können wir auch den Zusammenführungsmodus verwenden, um die vorhandenen Dokumente zu überschreiben
fuego copy countries/france/cities countries/germany/cities --overwrite --merge
Wir können ein Dokument und seine Untersammlungen kopieren.
fuego copy countries/france countries/germany
Parameter -Merge und -Overwrite können auch verwendet werden, um das Kopierverhalten anzugeben.
Möglicherweise haben wir Firestore in verschiedenen Google -Projekten. Wir können die Quellprojektanmeldung mithilfe von --src-credentials
(oder -sc
) und den Zielprojektanmeldeinformationen angeben, indem wir --dest-credentials
( -dc
) verwenden. Der Standardwert der --src-credentials
und --dest-credentials
ist unser aktuelles Arbeitsprojekt.
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
Möglicherweise haben wir auch einen Berechtigungsnachweis, der Zugriff auf verschiedene Projekte hat. Wir können die Quellprojekt -ID an --src-projectid
(oder -sp
) und die Zielprojekt -ID angeben, indem wir --dest-projectid
(oder -dp
) verwenden. Der Standardwert des --src-prjectid
und --dest-prjectid
ist die ID unseres aktuellen Arbeitsprojekts.
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
In der Hacking -Datei finden Sie einige Anleitungen zum Beitrag.