این آموزش عملیات پایه 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)
}