문서 메뉴
문서 홈
/ / /
Go 드라이버
/ / /

쿼리 지정

이 페이지의 내용

  • 개요
  • 리터럴 값
  • 비교
  • 논리
  • 요소
  • 평가
  • 배열
  • 비트 단위
  • 추가 정보

이 가이드에서는 문서의 하위 집합과 일치하도록 쿼리를 지정하는 방법을 배울 수 있습니다.

문서의 하위 집합을 일치시키려면 일치 조건이 포함된 쿼리 필터를 지정합니다. 일치 조건은 문서에 표시하려는 필드와 값으로 구성됩니다. 쿼리 필터에는 결과 집합에 포함할 문서를 결정하기 위해 하나 이상의 일치 조건 집합이 포함되어 있습니다.

쿼리 필터에서 리터럴 값 또는 쿼리 연산자를 사용하여 필드를 일치시킬 수 있습니다. 쿼리 연산자를 사용하면 수학적 또는 논리적 작업을 수행하여 컬렉션 내에서 문서를 찾을 수 있습니다.

리터럴 값이 있는 일치 조건은 다음 형식을 사용합니다.

filter := bson.D{{"<field>", "<value>"}}

쿼리 연산자가 있는 일치 조건은 다음 형식을 사용합니다.

filter := bson.D{{"<field>", bson.D{{"<operator>", "<value>"}}}}

다음 섹션에서는 리터럴 값쿼리 연산자Find() 메서드와 함께 사용하여 문서의 하위 집합을 일치시킵니다.

이 섹션의 예제에서는 다음 Tea 구조체를 tea 컬렉션에 있는 문서의 모델로 사용합니다.

type Tea struct {
Type string
Rating int32
Vendor []string `bson:"vendor,omitempty" json:"vendor,omitempty"`
}

omitempty 구조체 태그 는 비워 두면 삽입된 문서에서 해당 필드를 생략합니다.

이 가이드의 예제를 실행하려면 다음 스니펫을 사용하여 샘플 데이터를 db 데이터베이스의 tea 컬렉션에 로드합니다.

coll := client.Database("db").Collection("tea")
docs := []interface{}{
Tea{Type: "Masala", Rating: 10, Vendor: []string{"A", "C"}},
Tea{Type: "English Breakfast", Rating: 6},
Tea{Type: "Oolong", Rating: 7, Vendor: []string{"C"}},
Tea{Type: "Assam", Rating: 5},
Tea{Type: "Earl Grey", Rating: 8, Vendor: []string{"A", "B"}},
}
result, err := coll.InsertMany(context.TODO(), docs)

존재하지 않는 데이터베이스 및 collection

쓰기 작업을 수행할 때 필요한 데이터베이스 및 collection이 없는 경우 서버는 이를 암시적으로 생성합니다.

각 문서에는 차 종류, 등급, 해당 품종을 판매하는 공급업체가 설명되어 있습니다. 이러한 항목은 type, ratingvendor 필드에 해당합니다.

리터럴 값 쿼리 필터는 일치 기준과 정확히 일치하는 문서를 반환합니다.

빈 쿼리 필터를 지정하면 CRUD 작업은 컬렉션의 모든 문서와 일치합니다.

다음 예는 type이 'Oolong'인 문서를 일치시킵니다.

filter := bson.D{{"type", "Oolong"}}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

리터럴 값 쿼리는 $eq 비교 연산자와 동일한 값을 반환합니다. 예를 들어 다음 쿼리 필터는 동일한 결과를 생성합니다.

filter := bson.D{{"type", "Oolong"}}
filter := bson.D{{"type", bson.D{{"$eq", "Oolong"}}}}

비교 연산자는 일치 기준에 지정된 값을 기준으로 문서의 값을 분석합니다. 일반적인 비교 연산자로는 '보다 큰(greater than)' 비교를 위한 $gt, '보다 작은(less than)' 비교를 위한 $lte, '같지 않은(not equal to)' 비교를 위한 $ne 등이 있습니다.

다음 예는 rating7보다 작은 문서를 일치시킵니다.

filter := bson.D{{"rating", bson.D{{"$lt", 7}}}}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

비교 연산자의 전체 목록은 비교 쿼리 연산자 페이지를 참조하세요.

논리 연산자에는 최소 두 개의 일치 조건이 필요합니다. 문서가 지정된 기준을 모두 충족하는지, 하나만 충족하는지 또는 전혀 충족하지 않는지 확인합니다. 일반적인 논리 연산자로는 모든 일치 기준이 참이어야 하는 $and, 일치 기준 중 하나 이상이 참이어야 하는 $or 등이 있습니다.

다음 예는 rating7보다 크고 10 보다 작거나 같은 문서를 일치시킵니다.

filter := bson.D{
{"$and",
bson.A{
bson.D{{"rating", bson.D{{"$gt", 7}}}},
bson.D{{"rating", bson.D{{"$lte", 10}}}},
},
},
}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

논리 연산자의 전체 목록은 논리 쿼리 연산자 페이지를 참조하세요.

리터럴 쿼리 내 $eq 비교 연산자와 유사한 여러 일치 기준은 $and 논리 연산자와 동일한 값을 반환합니다. 예를 들어 다음 쿼리 필터는 동일한 결과를 생성합니다:

filter := bson.D{{"type", "Oolong"}, {"rating", 7}}
filter := bson.D{
{"$and",
bson.A{
bson.D{{"type", "Oolong"}},
bson.D{{"rating", 7}},
}},
}

요소 연산자는 지정된 필드의 존재 여부 또는 유형을 확인합니다.

다음은 vendor 필드가 존재하지 않는 문서와 일치하는 예입니다.

filter := bson.D{{"vendor", bson.D{{"$exists", false}}}}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

요소 연산자의 전체 목록은 요소 쿼리 연산자 페이지를 참조하세요.

평가 연산자는 일치 기준에 지정된 값을 기반으로 문서의 값을 분석합니다. 일반적인 평가 연산자에는 필드 값이 지정된 정규 표현식과 일치해야 하는 $regex, 필드 값에 지정된 문자열이 포함되어야 하는 $text 등이 있습니다.

다음 예는 type이 문자 'E'로 시작하는 문서와 일치합니다.

filter := bson.D{{"type", bson.D{{"$regex", "^E"}}}}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

평가 연산자의 전체 목록은 평가 쿼리 연산자 페이지를 참조하세요.

배열 연산자는 배열 필드에 있는 요소의 값이나 양을 확인합니다.

다음 예는 vendor에 'C'가 포함된 문서와 일치합니다:

filter := bson.D{{"vendor", bson.D{{"$all", bson.A{"C"}}}}}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

배열 연산자의 전체 목록은 배열 쿼리 연산자 페이지를 참조하세요.

비트 연산자는 숫자 필드를 밑이 10진수(십진법)인 숫자에서 해당하는 밑이 2진수(이진법)인 숫자로 변환합니다. 비트 연산자는 문서의 값이 사용자의 매치 기준의 값과 동일한 비트로 설정되어 있는지 확인합니다.

다음 예제는 rating6('00000110')과 동일한 비트가 설정된 문서와 일치합니다.

filter := bson.D{{"rating", bson.D{{"$bitsAllSet", 6}}}}
cursor, err := coll.Find(context.TODO(), filter)
if err != nil {
panic(err)
}
var results []Tea
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
res, _ := bson.MarshalExtJSON(result, false, false)
fmt.Println(string(res))
}

비트 연산자의 전체 목록은 비트 쿼리 연산자 페이지를 참조하세요.

지리 공간적 쿼리 지정에 대한 자세한 내용은 지리공간 데이터 가이드를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

← 읽기 작업