Docs Menu
Docs Home
/ / /
Ruby MongoDB Driver
/

집계

이 페이지의 내용

  • 집계 파이프라인
  • 단일 목적 집계 작업
  • Count
  • 별개

애그리게이션 프레임워크 작업은 데이터 레코드를 프로세스 하고 계산된 결과를 반환합니다. 애그리게이션 작업은 여러 문서의 값을 함께 그룹 하고 그룹화된 데이터에 대해 다양한 작업을 수행하여 단일 결과를 반환할 수 있습니다.

집계 파이프라인은 데이터 처리 파이프라인 개념을 모델로 한 데이터 집계를 위한 프레임워크입니다. 문서는 문서를 애그리게이션된 결과로 변환하는 다단계 파이프라인을 거치게 됩니다.

파이프라인 단계 및 연산자의 전체 설명과 전체 목록은 매뉴얼을 참조하세요.

다음 예제에서는 restaurants 샘플 데이터 세트의 집계 파이프라인을 사용하여 레스토랑 카테고리별로 그룹화된 별 5개 레스토랑의 총 수 목록을 찾습니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
coll = client['restaurants']
aggregation = coll.aggregate([
{ '$match'=> { 'stars'=> 5 } },
{ '$unwind'=> '$categories'},
{ '$group'=> { '_id'=> '$categories', 'fiveStars'=> { '$sum'=> 1 } } }
])
aggregation.each do |doc|
#=> Yields a BSON::Document.
end

aggregate 메서드 내에서 첫 번째 파이프라인 단계는 stars 필드에 5 가 있는 문서를 제외한 모든 문서를 필터링합니다. 두 번째 단계에서는 배열인 categories 필드를 풀고 배열의 각 항목을 별도의 문서로 취급합니다. 세 번째 단계에서는 문서를 카테고리별로 그룹화하고 일치하는 별 5개 결과의 수를 합산합니다.

집계 파이프라인 단계에는 최대 메모리 사용 한도 가 있습니다. 대규모 데이터 세트를 처리하려면 allowDiskUse 옵션을 true로 설정하여 임시 파일에 데이터를 쓸 수 있도록 설정합니다.

  • allow_disk_use 메서드 aggregation 객체를 호출하여 옵션이 설정된 새 객체를 가져올 수 있습니다.

aggregation = coll.aggregate([ <aggregration pipeline expressions> ])
aggregation_with_disk_use = aggregation.allow_disk_use(true)
  • 또는 aggregate 메서드에 옵션을 전달할 수 있습니다.

aggregation = coll.aggregate([ <aggregration pipeline expressions> ],
:allow_disk_use => true)

MongoDB는 countdistinct를 포함한 일부 애그리게이션 함수에 대한 헬퍼 메서드를 제공합니다.

다음 예에서는 count 메서드를 사용하여 categories 필드에 정확한 배열 [ 'Chinese', 'Seafood' ] 가 있는 총 문서 수를 찾는 방법을 보여 줍니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
coll = client['restaurants']
aggregation = coll.count({ 'categories': [ 'Chinese', 'Seafood' ] })
count = coll.count({ 'categories' => [ 'Chinese', 'Seafood' ] })

distinct 헬퍼 메서드는 값이 포함된 결과를 제거하고 각 고유 값에 대해 하나의 레코드를 반환합니다.

다음 예제에서는 restaurants collection의 categories 필드에 대한 고유 값 목록을 반환합니다.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
coll = client['restaurants']
aggregation = coll.distinct('categories')
aggregation.each do |doc|
#=> Yields a BSON::Document.
end

돌아가기

프로젝션