این آموزش عملیات پایه MongoDB را از دیدگاه زبان Golang معرفی می‌کند.

توجه: این آموزش از پکیج درایور رسمی زبان Go ارائه شده توسط MongoDB استفاده می‌کند.

آموزش‌های پیش‌نیاز

توجه: اگر با MongoDB آشنا نیستید، لطفاً ابتدا دانش MongoDB را مطالعه کنید. آموزش Golang مطالب مربوط را تکرار نمی‌کند.

الزامات ابتدایی

  • 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))

تابع Connect گره را مسدود نمی‌کند. به عبارت دیگر، مستقیماً پس از فراخوانی متد Connect، عملیات MongoDB ممکن است به دلیل اتصال موفقیت‌آمیز MongoDB خطا ایجاد کند. می‌توانید از متد Ping برای بررسی اتصال موفقیت‌آمیز MongoDB استفاده کنید.

// پینگ کردن MongoDB، اگر با موفقیت متصل شده باشد، هیچ خطایی برگردانده نمی‌شود
err = client.Ping(ctx, readpref.Primary())

آدرس اتصال MongoDB

آدرس اتصال MongoDB شامل اطلاعات مهمی مانند آدرس سرور، شماره پورت، حساب کاربری و گذرواژه است. قالب به این صورت است:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[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 برای درج داده‌ها.

// شیء Context که معمولاً برای تنظیم زمان مهلت درخواست استفاده می‌شود، همچنین می‌توانید از شیء Context ساخته شده از پیش استفاده کنید و نیازی به تعریف مجدد آن نیست
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)
}