개요

go.mongodb.org/mongo-driver를 활용하여 golang에서 MongoDB를 사용하는 방법을 알아본다.


모듈 다운로드

go get go.mongodb.org/mongo-driver 명령을 통해 mongo-driver 패키지를 다운로드 한다. 


모듈 임포트

Binary Json을 활용하여 데이터를 인서트 하기 위해 go.mongodb.org/mongo-driver/bson도 같이 임포트 한다. 

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

구조체 선언

MongoDB에 인서트 할 데이터를 구조체로 선언한다. 

type logEntity struct {
   logType    string `bson:"logType"`
   logValue   string `bson:"logValue"`
   dbPrefix   string `bson:"dbPrefix"`
   time       string `bson:"time"`
}

MongoDB Connection 형성

MongoDB의 Client를 리턴하는 함수를 작성한다. DB와의 Connection을 구성하기 위해 DB 주소와 포트가 필요하며, Credential이 필요한 경우 .SetAuth(credential)을 통해 설정 가능하다. 

func mongoConn()(client *mongo.Client){
   credential := options.Credential{
      Username: "<USER_NAME>",
      Password: "<PASSWORD>",
   }
   clientOptions := options.Client().ApplyURI("mongodb://localhost:27017").SetAuth(credential)
   client, err := mongo.Connect(context.TODO(), clientOptions)
   if err != nil {
      log.Fatal(err)
   }

   // Check the connection
   err = client.Ping(context.TODO(), nil)

   if err != nil {
      log.Fatal(err)
   }
   fmt.Println("MongoDB Connection Made")
   return client
}

Connection이 생성되면, 리턴받은 Client를 통해 MongoDB에서 사용할 Database와 Collection을 지정한다. 

conn := mongoConn()
mongo := conn.Database("log_data").Collection("logs")

Data Insertion

데이터 입력은 위에서 형성한 *mongo.Collection의 메소드를 통해 가능하다. 하나의 데이터를 입력하는 .InsertOne()과 여러 row를 동시에 입력하는 .InsertMany() 등의 메소드를 사용할 수 있다. 

bson.D는 여러 데이터를 입력할 때 순서대로 입력한다. 순서가 상관 없는 경우 bson.M을 사용할 수 있다. 

위의 구조체에서 bson 문서의 key로 설정한 값과 value를 지정하여 입력한다. 

func logWrite(writeDb *mongo.Collection){
   ...
   insertResult,err := writeDb.InsertOne(context.TODO(),bson.D{
      {Key:"logType",Value:name},
      {Key:"logValue",Value:strconv.Itoa(value)},
      {Key:"dbPrefix",Value:db.alias},
      {Key:"time",Value:currentTime},
   })
   if err != nil {
      log.Fatal(err)
   }
   ...
}

 

MongoDB에 접속하여 데이터가 정상적으로 입력됨을 확인한다.