محدث: تم تحديث البرنامج التعليمي فيما يتعلق بإصدار نسخة الإصدار.
خبر جيد! تم الافراج عن سائق الذهاب الرسمي ل mongoDB .
مع قليل من التفكير ، قررت ترجمة المقال من موقع mongoDB الرسمي بدلاً من كتابة المادة بنفسي (هذه الترجمة مختلفة عن المقالة).
إليك ما سيكون في هذا البرنامج التعليمي:
- تثبيت mongo-go-driver
- الاتصال mongoDB باستخدام mongo-go-driver
- باستخدام كائنات BSON
- باستخدام طرق CRUD

يمكن الاطلاع على الكود الأصلي في الوثائق الرسمية .
لاستخدام هذا الدليل ، يجب أن تكون قد قمت بتثبيت إصدار MongoDB لا يقل عن 2.6 و Golang 1.10 أو الأحدث.
تثبيت mongo-go-driver
يُنصح بتثبيت برنامج التشغيل باستخدام dep (بالطبع ، إذا كنت لا تزال غير قادر على التبديل إلى الوحدات النمطية):
dep ensure -add "go.mongodb.org/mongo-driver/mongo@~1.0.0"
إنشاء الأساس
قم بإنشاء مشروع وإضافة ملف main.go بالمحتويات التالية:
package main import ( "context" "fmt" "log" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" )
في هذا الرمز ، نستورد mongo-go-driver ، وبعض المكتبات القياسية ، ونحدد نوع Trainer.
الاتصال mongoDB باستخدام mongo-go-driver
بعد أن استوردنا mongo-go-driver ، حصلنا على الفرصة لإنشاء اتصال mongoDB باستخدام وظيفة mongo.NewClient () . لدينا الفرصة لتمرير هذه الوظيفة كحجج السياق والخط الذي يحتوي على عنوان الاتصال بـ mongodb. إذا رغبت في ذلك ، يمكننا أيضًا تمرير كائن options.ClientOptions باعتباره الوسيطة الثالثة لضبط إعدادات برنامج التشغيل.
تفاصيل الوثائق الخيارات المتاحة.
دعنا نضيف الكود التالي إلى نص الوظيفة الرئيسي:
بعد الاتصال بنجاح بـ mongoDB ، يمكننا الوصول إلى مجموعة المدربين ، والتي توجد في قاعدة البيانات تسمى test بإضافة الرمز التالي إلى نهاية الوظيفة الرئيسية:
collection := client.Database("test").Collection("trainers")
يوصى بإبقاء الاتصال مع mongoDB مفتوحًا حتى لا تضطر إلى فتح وإغلاق الاتصال لكل طلب. ومع ذلك ، إذا لم يعد التطبيق يتطلب اتصالًا ، فيمكن إغلاقه باستخدام دالة client.Disconnect () كما يلي:
err = client.Disconnect(context.TODO()) if err != nil { log.Fatal(err) } fmt.Println("Connection to MongoDB closed.")
التعليق خارج الحزم غير المستخدمة.
قم بتشغيل الكود الخاص بنا ( go run main.go ) للتحقق من الاتصال بخادم mongoDB.
باستخدام كائنات BSON
يتم تخزين مستندات JSON في mongoDB بتنسيق ثنائي يسمى BSON. بخلاف قواعد البيانات الأخرى التي يتم فيها تخزين بيانات JSON في شكل سلاسل وأرقام ، يضيف تشفير BSON أنواعًا جديدة ، مثل int ، long ، date ، float و decimal128 .
هذا يبسط إلى حد كبير معالجة وفرز ومقارنة البيانات من قبل التطبيقات. يحتوي برنامج التشغيل Go على نوعين من العائلات لتمثيل بيانات BSON: أنواع D وأنواع RAW.
تتكون عائلة D من أربعة أنواع:
- D : وثيقة BSON. يجب استخدام هذا النوع في الحالات التي يكون فيها الأمر مهمًا ، على سبيل المثال ، أوامر MongoDB.
- M : قاموس غير مرتبة (مجموعة النقابي ، خريطة). هو نفسه D ، إلا أنه لا يحافظ على النظام.
- a : مجموعة bson.
- E : عنصر واحد داخل D.
فيما يلي مثال على مرشح تم إنشاؤه باستخدام أنواع D يبحث عن المستندات التي يتطابق فيها حقل الاسم مع قيم Alice أو Bob :
تستخدم عائلة النوع الخام للتحقق من تقطيع البايت. يمكنك استخراج العناصر الفردية من أنواع Raw باستخدام Lookup () .
قد يكون ذلك مفيدًا عندما تحتاج إلى التخلص من الحمل الإضافي عند تحويل BSON إلى نوع آخر.
سيتم استخدام عائلة D-type فقط في هذا البرنامج التعليمي.
باستخدام طرق CRUD
بعد الاتصال بنجاح بقاعدة البيانات ، يمكننا البدء في إضافة وتعديل البيانات في مجموعتنا.
يحتوي نوع المجموعة على الأساليب التي تسمح لك بإرسال استعلامات إلى قاعدة البيانات.
إدراج (إنشاء) الوثائق
تحتاج أولاً إلى إنشاء بعض هياكل المدرب الجديدة لإدراجها في قاعدة البيانات:
ash := Trainer{"Ash", 10, "Pallet Town"} misty := Trainer{"Misty", 10, "Cerulean City"} brock := Trainer{"Brock", 15, "Pewter City"}
لتضمين مستند واحد ، استخدم الأسلوب collection.InsertOne () :
insertResult, err := collection.InsertOne(context.TODO(), ash) if err != nil { log.Fatal(err) } fmt.Println("Inserted a single document: ", insertResult.InsertedID)
لإدراج مستندات متعددة في نفس الوقت ، توجد طريقة collection.InsertMany () :
trainers := []interface{}{misty, brock} insertManyResult, err := collection.InsertMany(context.TODO(), trainers) if err != nil { log.Fatal(err) } fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs)
تحديث المستند
تتيح لك طريقة collection.UpdateOne () تحديث وثيقة واحدة. تحتاج إلى إنشاء عامل تصفية للبحث عن مستند في قاعدة البيانات ووثيقة لعملية التحديث. يمكنك إنشائها باستخدام أنواع bson.D :
filter := bson.D{{"name", "Ash"}} update := bson.D{ {"$inc", bson.D{ {"age", 1}, }}, }
سوف تجد التعليمة البرمجية التالية مستندًا يطابق فيه حقل الاسم قيمة الرماد ويزيد من قيمة العمر بمقدار 1.
updateResult, err := collection.UpdateOne(context.TODO(), filter, update) if err != nil { log.Fatal(err) } fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
بحث الوثائق
للعثور على مستند ، ستحتاج إلى عامل تصفية ، بالإضافة إلى مؤشر إلى متغير يمكن فك تشفير النتيجة فيه.
للعثور على وثيقة واحدة ، استخدم collection.FindOne () . تقوم هذه الطريقة بإرجاع قيمة واحدة يمكن فك تشفيرها إلى متغير.
سوف نستخدم نفس متغير الفلتر الذي تم استخدامه في طلب التحديث.
للعثور على مستندات متعددة ، استخدم collection.Find () .
هذا الأسلوب بإرجاع المؤشر . يوفر المؤشر مجموعة من الوثائق التي يمكنك من خلالها تكرار وفك تشفير وثيقة واحدة في وقت واحد.
عند استنفاد المستندات الموجودة في المؤشر ، يجب عليك إغلاق المؤشر . يمكنك أيضًا ضبط المؤشر باستخدام حزمة الخيارات .
في مثالنا ، وضعنا حداً على إصدار وثيقتين.
حذف المستندات
يمكنك حذف المستندات باستخدام collection.DeleteOne () أو collection.DeleteMany () . نعبر عن nil كوسيطة تصفية ، والتي سوف تطابق جميع الوثائق في المجموعة. يمكنك أيضًا استخدام collection.Drop () لحذف المجموعة بالكامل.
filter := bson.M{} deleteResult, err := collection.DeleteMany(context.TODO(), filter) if err != nil { log.Fatal(err) } fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult.DeletedCount)
خطوات إضافية
→ الرمز النهائي لهذا البرنامج التعليمي في مستودع جيثب
→ وثائق برنامج التشغيل متوفرة في GoDoc
إذا كان لديك أي أسئلة ، يرجى الاتصال بنا في google group mongo-go-driver .
الرجاء إرسال تقارير الأخطاء إلى MongoDB JIRA .
سنكون سعداء لتلقي ملاحظاتك حول Go Driver.