개요
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에 접속하여 데이터가 정상적으로 입력됨을 확인한다.