ใช้ Golang กับ MongoDB ด้วย MongoDB Go Driver

Panupong Luangpatoom
Focal Solution
Published in
1 min readOct 15, 2019

ในการเชื่อมต่อกับฐานข้อมูล ต้องมีไดร์เวอร์สำหรับการเชื่อมต่อ

MongoDB Go Driver ก็คือไดร์เวอร์เชื่อมต่อ MongoDB สำหรับภาษา Go แต่ก็ไม่จำเป็นที่จะต้องใช้ library นี้ตัวเดียวยังมีตัวอื่นๆที่ทำได้เช่นกัน อย่างเช่น mgo (ดูรายละเอียดได้ที่ mgo.v2)

Mongo db driver

ทำไมต้อง MongoDB Go Driver

เพราะมันคือ Official library จาก MongoDB และด้วยเหตุผลนี้เลยทำให้เลือกใช้ครับ (แต่ที่จริงๆก็คือก่อนหน้านี้เคยใช้ mgo.v2 มาแล้ว อยากลองของ official บ้าง >w<)

เริ่มใช้งาน

ผมขอข้าม step การติดตั้ง MongoDB ไปนะครับ มาเริ่มที่การใช้ library กันเลย

เริ่มแรกเราต้องมาติดตั้ง library ลงใน project ของเราก่อน เนื่องจากผมใช้ golang/dep เลยใช้คำสั่งตามด้านล่างครับ (สามารถใช้ go cmd get ได้เหมือนกัน)

dep ensure -add "go.mongodb.org/mongo-driver/mongo@~1.1.0"

จากนั้นเราก็ import library เพื่อใช้งานใน project เราได้เลย

import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

จากนั้นก็มา config client เพื่อเชื่อมต่อ MongoDB (ขั้นตอนนี้เป็นแค่การสร้าง client ไว้เท่านั้น ไม่ได้เชื่อมต่อจริงๆ)

client, err := mongo.NewClient(options.Client().ApplyURI("ใส่ mondo host ตรงนี้"))

ต่อไปเราก็มาเชื่อม client ไปยัง MongoDB server ด้วยคำสั่งด้านล่าง

ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
err = client.Connect(ctx)

เมื่อทำคำสั่งด้านบนเสร็จ เราจะได้ client ที่เชื่อมต่อไปยัง mongo เรียบร้อย เราสามารถปิดการเชื่อมต่อโดยใช้

err = client.Disconnect(ctx)

หลังจากเชื่อมต่อแล้ว เราสามารถใช้คำสั่งเพื่อเรียกดู database และ collection ได้เลย

// เรียกดู database
db := client.Database("activity")
// เรียกดู collection
collection := db.Collection("logs")

อีกหนึ่งความสามารถคือการแปลง result เป็น struct

// สามารถใช้ tag กำหนดชื่อฟิลด์ได้เลย
var result struct {
Name string `bson:"name"`
}
filter := bson.M{"name": "focal"}ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
err = collection.FindOne(ctx, filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
// เราสามารถใช้ result ได้แล้วเช่น
// result.Name

--

--