이 튜토리얼은 Golang 언어 관점에서 MongoDB의 기본 동작을 소개합니다.
참고: 이 튜토리얼은 MongoDB가 제공하는 공식 Go 언어 드라이버 패키지를 사용합니다.
사전 튜토리얼
참고: 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에 핑을 보내 연결에 성공했으면 오류가 반환되지 않습니다
err = client.Ping(ctx, readpref.Primary())
MongoDB 연결 주소
MongoDB 연결 주소에는 서버 주소, 포트 번호, 계정 및 비밀번호와 같은 중요한 정보가 포함됩니다. 형식은 다음과 같습니다.
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
예시:
// 기본 사용자명과 비밀번호로 localhost:27017 주소에 연결
mongodb://localhost:27017
// 계정=root, 비밀번호=123456으로 localhost:27017 주소에 연결하고 기본 데이터베이스=admin에 연결
mongodb://root:123456@localhost:27017/admin
연결 리소스 해제
연결이 더 이상 필요하지 않으면 연결 리소스를 수동으로 해제해야 합니다.
defer func() {
if err = client.Disconnect(ctx); err != nil {
panic(err)
}
}()
컬렉션 인스턴스 가져오기
Golang에서 MongoDB를 조작하려면 먼저 컬렉션 인스턴스를 가져와 CRUD 작업을 수행해야 합니다.
// Database를 통해 데이터베이스 이름을 설정하고 Collection을 통해 컬렉션 이름을 설정합니다.
collection := client.Database("testing").Collection("numbers")
참고: MongoDB의 특성에 따라 미리 데이터베이스 및 컬렉션을 생성할 필요가 없습니다. 데이터가 처음으로 작성될 때 자동으로 생성됩니다.
문서 삽입
InsertOne 함수를 사용하여 데이터를 삽입합니다.
// Context 객체, 요청 시간 초과를 설정하는 데 일반적으로 사용되며, 이전에 만든 context 객체를 재사용할 수 있습니다. 다시 정의할 필요 없음
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// 문서 삽입, 여기에서는 JSON 문서를 나타내기 위해 bson.D 유형을 사용합니다. bson.D는 JSON 배열을 나타냅니다.
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
// 새로 추가된 문서의 ID 가져오기
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"
)
참고: Golang에서 bson 패키지는 JSON 문서 데이터 구조를 나타내기 위해 사용됩니다. 다음 장에서는 Golang에서 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=", id)
}