يرجى قراءة وثائق الإصدار المستقر إذا كنت تريد فقط استخدام Fuego
سطر أوامر عميل Firestore.
قم بتنزيل واحدة من الثنائيات المسبقة من أحدث إصدار. (يبني متاحًا لنظام التشغيل 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 ، ثم إعدادات المشروع ، ثم انقر فوق علامة تبويب حسابات الخدمة وإنشاء مفتاح خاص جديد.
بمجرد حصولك على ملف مفتاح حساب الخدمة الخاص بك ، ستتمكن 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 إلى شيء مناسب (عادةً ، مضيف محلي: 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
. هذا هو الحال أيضًا للحذف وأوامر الحصول على.
في كلا الأوامر 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 بتخطيط مستندات JSON إلى مستندات Firestore ، وكيفية التعبير عن نظام النوع الأكثر تقدماً باستخدام "JSON".
يمكنك العمل على التوصيلات الفرعية باستخدام المسار الكامل مع "/" كفواصل. على سبيل المثال:
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" '
بالنسبة للقيم ، يتم دعم القيم الرقمية والسلسلة والطراز المنطقي (صحيح أو خطأ) وقيم الطابع الزمني في المرشحات. أمثلة على الاستفسارات:
"Age> = 34" ، "name == 'Paul'" ، "arber == true" ، و "birthday == 1977-06-28t04: 00: 00z"
لاحظ أن قيم الطوابع الزمنية يجب أن تستخدم تنسيق RFC3339 ويجب عدم اقتباسها. يتم تمثيل القيم المنطقية بالسلاسل الحقيقية والخطبة غير المخصصة.
يجب التعبير عن قيم المصفوفات كما في المثال التالي. لاحظ أن العناصر مفصولة حسب الفضاء:
fuego query cities ' name <in> ["bogota" "cali" "medellin"] '
استخدم العلم -select لطلب بشكل واضح الحقول المحددة التي تريد استردادها (يمكنك تحديد العديد من باستخدام عدة -SELECT)
fuego query --select name --select year --limit 1 --orderby year --orderdir ASC nobel " birthplace.country == 'USA' "
إذا لزم الأمر ، يمكنك استخدام معلمات ترقيم Firestore للصفحة يدويًا من خلال النتائج. الجمع بين -تحديد الأعلام -startat ، -startafter ، -endat ، و -التي تقبل جميعها معرف الوثيقة.
يمكنك عمل استعلامات جماعية للاستعلام عن جميع المناطق الفرعية التي تشارك معرفًا مشتركًا باستخدام علامة -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
أيضًا ، باستخدام Flag -Merge ، دعنا نستطيع استخدام وضع الدمج للكتابة فوق المستندات الموجودة
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
هي معرف مشروع العمل الحالي لدينا.
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
انظر ملف القرصنة للحصول على بعض التوجيهات حول كيفية المساهمة.