هذا البرنامج التعليمي يقدم عمليات MongoDB الأساسية من منظور لغة Golang.
ملاحظة: يستخدم هذا البرنامج التعليمي حزمة سائق اللغة Go الرسمية التي تقدمها MongoDB.
البرامج التعليمية الأساسية
- Go 1.10 أو أحدث
- MongoDB 2.6 أو أحدث
تثبيت الإعتماديات
go get go.mongodb.org/mongo-driver/mongo
الإتصال بـ MongoDB
import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
)
// عنوان اتصال MongoDB
uri := "mongodb://localhost:27017"
// الحصول على كائن السياق، يمكنك تعيين مهلة زمنية
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// الاتصال بـ MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
وظيفة الاتصال لا تحجب الـ goroutine. هذا يعني أن التشغيل المباشر لـ MongoDB بعد استدعاء طريقة الاتصال قد يؤدي إلى حدوث خطأ لأن MongoDB لم يتم الاتصال به بنجاح. يمكنك استخدام طريقة الـ Ping للتحقق مما إذا تم الاتصال بـ MongoDB بنجاح.
// عنوان اتصال MongoDB، تشمل معلومات مهمة مثل عنوان السيرفر، رقم المنفذ، الحساب، وكلمة المرور
// التنسيق كالتالي:
mongodb://[اسم المستخدم:كلمة المرور@]مضيف1[:منفذ1][,...مضيفN[:منفذN]][/[defaultauthdb][?options]]
// مثال:
// الاتصال بعنوان localhost:27017 مع اسم مستخدم وكلمة مرور افتراضية
mongodb://localhost:27017
// الاتصال بعنوان localhost:27017 مع الحساب=root، وكلمة المرور=123456، والاتصال بقاعدة البيانات الافتراضية=admin
mongodb://root:123456@localhost:27017/admin
تحرير موارد الاتصال
إذا لم يعد الاتصال مطلوبًا، فيجب عليك تحرير موارد الاتصال يدويًا.
defer func() {
if err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
الحصول على مثيل مجموعة
لتشغيل MongoDB في Golang، تحتاج أولاً إلى الحصول على مثيل المجموعة، وبعد ذلك يمكنك القيام بعمليات CRUD على مثيل المجموعة.
// تعيين اسم قاعدة البيانات من خلال Database، وتعيين اسم المجموعة من خلال Collection
collection := client.Database("testing").Collection("numbers")
ملاحظة: وفقًا لسمات MongoDB، ليس من الضروري إنشاء قاعدة البيانات والمجموعة مسبقًا. سيتم إنشاؤها تلقائيًا عند كتابة البيانات لأول مرة.
إدراج الوثيقة
قم بإدراج البيانات باستخدام دالة InsertOne.
// كائن السياق، المستخدم بشكل شائع لتعيين مهلة الطلب، يمكنك أيضًا إعادة استخدام كائن السياق الذي تم إنشاؤه مسبقًا، ليس هناك حاجة لإعادة تعريفه
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// إدراج الوثيقة، هنا نستخدم نوع bson.D لوصف وثيقة JSON، حيث يمثل bson.D مصفوفة JSON
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
// الحصول على معرّف الوثيقة الجديدة التي تمت إضافتها
id := res.InsertedID
يجب عليك استيراد الحزم التالية:
import (
"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"
)
ملاحظة: في جو لانغ، يُستخدم حزمة bson لتمثيل بنية بيانات وثيقة JSON. ستقوم الفصول التالية بتفصيل تعبير هياكل تخزين بيانات MongoDB في جو لانغ.
package main
import (
"context"
"fmt"
"time"
"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"
)
func main() {
// تعيين عنوان اتصال MongoDB
uri := "mongodb://root:123456@localhost:27017/admin"
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// الاتصال بـ MongoDB
client, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}
defer func() {
// إطلاق الاتصال مع تأخير
if err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
// التحقق مما إذا كان الاتصال بـ MongoDB ناجحًا
if err := client.Ping(ctx, readpref.Primary()); err != nil {
panic(err)
}
fmt.Println("تم الاتصال بـ MongoDB بنجاح!")
// الحصول على مجموعة الأرقام
collection := client.Database("testing").Collection("numbers")
// إدراج وثيقة
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
id := res.InsertedID
fmt.Println("معرّف الوثيقة الجديدة=", id)
}