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

문서 수 계산

이 페이지의 내용

  • 개요
  • 정확한 카운트
  • 집계
  • 예상 개수
  • 추가 정보

이 가이드에서는 컬렉션의 문서 수에 대한 개의 정확한 예상 개수를 얻는 방법에 대해 알아볼 수 있습니다.

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

type Tea struct {
Type string
Rating int32
}

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

coll := client.Database("db").Collection("tea")
docs := []interface{}{
Tea{Type: "Masala", Rating: 10},
Tea{Type: "Matcha", Rating: 7},
Tea{Type: "Assam", Rating: 4},
Tea{Type: "Oolong", Rating: 9},
Tea{Type: "Chrysanthemum", Rating: 5},
Tea{Type: "Earl Grey", Rating: 8},
Tea{Type: "Jasmine", Rating: 3},
Tea{Type: "English Breakfast", Rating: 6},
Tea{Type: "White Peony", Rating: 4},
}
result, err := coll.InsertMany(context.TODO(), docs)

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

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

각 문서에는 차의 종류와 등급이 설명되어 있습니다. 이러한 항목은 typerating 필드에 해당합니다.

쿼리 필터와 일치하는 문서 수를 계산하려면 CountDocuments() 메서드를 사용합니다. 빈 쿼리 필터를 전달하는 경우 이 메서드는 컬렉션에 있는 총 문서 수를 반환합니다.

CountDocuments()를 사용하여 컬렉션의 총 문서 수를 반환하면 MongoDB는 컬렉션 스캔을 수행합니다. _id 필드에 내장된 인덱스를 활용하는 힌트를 사용하여 컬렉션 스캔을 피하고 이 메서드의 성능을 향상시킬 수 있습니다. 이 기법은 빈 쿼리 매개 변수로 CountDocuments()를 호출할 때만 사용합니다.

opts := options.Count().SetHint("_id_")
count, err := coll.CountDocuments(context.TODO(), bson.D{}, opts)
if err != nil {
panic(err)
}

CountDocuments()의 동작을 수정하려면 CountOptions 유형을 전달하세요. 옵션을 지정하지 않으면 드라이버는 기본값을 사용합니다.

CountOptions 유형을 사용하면 다음 방법으로 옵션을 구성할 수 있습니다.

메서드
설명
SetCollation()
결과를 정렬할 때 사용할 언어 데이터 정렬 유형입니다.
기본값입니다: nil
SetHint()
계산할 문서를 스캔할 때 사용할 인덱스입니다.
기본값입니다: nil
SetLimit()
반환할 문서의 최대 개수.
기본값입니다: 0
SetMaxTime()
서버에서 쿼리를 실행할 수 있는 최대 시간입니다.
기본값입니다: nil
SetSkip()
계산하기 전에 건너뛸 문서 수입니다.
기본값입니다: 0

다음 예에서는 rating6 보다 작은 문서 수를 계산합니다.

filter := bson.D{{"rating", bson.D{{"$lt", 6}}}}
count, err := coll.CountDocuments(context.TODO(), filter)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents with a rating less than six: %d\n", count)

집계 파이프라인의 문서 수를 계산하는 $count 단계를 포함할 수도 있습니다.

다음 예제에서는 다음 작업을 수행합니다:

  • rating 필드의 값이 5보다 큰 문서 수를 계산합니다.

  • counted_documents 필드에 개수를 할당합니다.

matchStage := bson.D{{"$match", bson.D{{"rating", bson.D{{"$gt", 5}}}}}}
countStage := bson.D{{"$count", "counted_documents"}}
cursor, err := coll.Aggregate(context.TODO(), mongo.Pipeline{matchStage, countStage})
if err != nil {
panic(err)
}
var results []bson.D
if err = cursor.All(context.TODO(), &results); err != nil {
panic(err)
}
for _, result := range results {
fmt.Println(result)
}

컬렉션의 문서 수를 추정하려면 EstimatedDocumentCount() 메서드를 사용합니다.

참고

0}EstimatedDocumentCount() 메서드는 전체 컬렉션을 스캔하는 대신 컬렉션의 메타데이터를 사용하기 때문에 CountDocuments() 메서드보다 빠릅니다.

EstimatedDocumentCountOptions 유형을 전달하여 EstimatedDocumentCount() 의 동작을 수정할 수 있습니다. 옵션을 지정하지 않으면 드라이버는 기본값을 사용합니다.

EstimatedDocumentCountOptions 유형을 사용하면 다음 방법으로 옵션을 구성할 수 있습니다.

메서드
설명
SetMaxTime()
서버에서 쿼리를 실행할 수 있는 최대 시간입니다.
기본값입니다: nil

다음 예는 tea 컬렉션의 문서 수를 추정하는 예입니다:

count, err := coll.EstimatedDocumentCount(context.TODO())
if err != nil {
panic(err)
}
fmt.Printf("Estimated number of documents in the tea collection: %d\n", count)

언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.

  • 쿼리 지정

  • 반환된 결과 건너뛰기

  • 반환되는 결과 수 제한

  • 집계

  • 데이터 정렬.

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

← 쿼리 지정