[MongoDB] mongo java driver 에서 aggregate 사용하기

 

 

아래와 같은 데이터가 있다고 하자.

 

데이터베이스 이름은 dataset 이고 컬렉션의 이름은 data 이다.

 

mongos> db.data.find()

{ "_id" : 1, "from" : 998, "to" : 807 }

{ "_id" : 2, "from" : 269, "to" : 209 }

{ "_id" : 3, "from" : 78, "to" : 105 }

{ "_id" : 4, "from" : 1, "to" : 824 }

{ "_id" : 5, "from" : 785, "to" : 244 }

{ "_id" : 6, "from" : 145, "to" : 971 }

{ "_id" : 7, "from" : 597, "to" : 644 }

{ "_id" : 8, "from" : 33, "to" : 82 }

{ "_id" : 9, "from" : 257, "to" : 900 }

{ "_id" : 10, "from" : 281, "to" : 38 }

{ "_id" : 11, "from" : 448, "to" : 24 }

{ "_id" : 12, "from" : 625, "to" : 302 }

{ "_id" : 13, "from" : 132, "to" : 170 }

{ "_id" : 14, "from" : 67, "to" : 120 }

{ "_id" : 15, "from" : 323, "to" : 145 }

{ "_id" : 16, "from" : 800, "to" : 773 }

{ "_id" : 17, "from" : 395, "to" : 524 }

{ "_id" : 18, "from" : 1, "to" : 621 }

.....

 

여기서 우리는 from 을 그룹으로 묶은 후 to의 합을 구하고 싶다.

 

아래처럼 mongo aggregate query 를 사용하여 구할 수 있다.

 

db.data.aggregate([{ $group: { _id:"$from", sum: {$sum:"$to"} }}]) 

 

 

 

그럼 자바 코드에서는 어떻게 사용할 수 있을까?

 

아래 명령어처럼 사용하면 된다.

 

 

 


import java.util.Arrays; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.client.AggregateIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; .... MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://[MongoDB IP Address]:27017")); MongoDatabase database = mongoClient.getDatabase("dataset"); MongoCollection<Document> coll = database.getCollection("data"); AggregateIterable<Document> output = coll.aggregate(Arrays.asList( new Document("$group", new Document("_id", "$from").append("sum", new Document("$sum", "$to"))))); for (Document dbObject : output) { System.out.println("_id : " + dbObject.get("_id") + " sum : " + dbObject.get("sum")); }

 

위에 [MongoDB IP Address]에 적절한 ip 값만 넣어주면 MongoDB 에 접속해서 dataset.data 에 접근하게 되고

 

coll.aggregate 메소드로 aggregate 쿼리를 보내게 된다.

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

응답은 AggregateIterable<Document> 형식으로 받아지고, 그것을 파싱해서 프린트하면 된다.

 

실행 결과 화면

 

 

 

 

 

 

 

다른 예를 들어보자.

 

from 의 unique 한 아이템들의 개수를 구하고 싶다고 하자.

 

아래처럼 Set 에 넣고 size 를 구하면 된다.

 

db.data.aggregate([{

    $group: {

    _id: null,

    count: {

        "$addToSet": "$from"

    }

    }

}, {

    $project: {

    "size": {

        $size: "$count"

    }

    }

}])

 

 

 

자바 프로그래밍을 할 때는 아래처럼 하면 된다.

 

 

 

AggregateIterable<Document> output = coll .aggregate( Arrays.asList( new Document("$group",

new Document("_id", "null").append("fromCount", new Document("$addToSet", "$from"))), new Document("$project", new Document("size", new Document("$size", "$fromCount"))))); for (Document dbObject : output) { System.out.println(" size : " + dbObject.get("size")); }

 

 

 

[출처] https://eyeballs.tistory.com/43?category=746952

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 87093
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79307
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 96039
46 [데이터분석 & 데이터 사이언스] 수많은 데이터 사이언티스트들이 직장을 떠나는 이유는 무엇인가? file 졸리운_곰 2025.03.09 908
45 [데이터분석][파이썬][python] 한글 글꼴 사용 (matplotlib) 졸리운_곰 2024.04.18 1364
44 [데이터분석 & 데이터 사이언스] 데이터에 관한 꼭 알아야 할 오해와 진실 12가지 졸리운_곰 2024.01.17 1317
43 [데이터분석][파이썬][python] Awesome Dash Awesome file 졸리운_곰 2021.07.10 2346
42 [데이터분석][파이썬][python] ???? Introducing Dash ???? file 졸리운_곰 2021.07.10 1611
41 [dataset] (한글) 욕설 감지 데이터셋 file 졸리운_곰 2021.05.12 1561
40 [데이터분석][python] Dash를 사용하는 초보자 및 기타 모든 사용자를위한 Python의 대시 보드 file 졸리운_곰 2021.04.14 1770
39 [데이터분석][python] Dash를 사용하는 초보자 및 기타 모든 사용자를위한 Python의 대시 보드 file 졸리운_곰 2021.04.14 1609
38 [데이터분석][데이터 사이언스][python][Dash] Python, Dash 및 Plotly를 사용하여 COVID-19 사례 데이터 시각화 file 졸리운_곰 2021.03.28 1505
37 [데이터분석][머신러닝] When not to use machine learning or AI Adventures in wishful thinking, nonstationarity, and pattern-finding / 기계 학습 또는 AI를 사용하지 않아야하는 경우 희망찬 사고, 비정상 성, 패턴 찾기의 모험 file 졸리운_곰 2021.03.28 21624
36 [MSA][머신러닝] 쿠버네티스 기반의 End2End 머신러닝 플랫폼 Kubeflow #1 - 소개 file 졸리운_곰 2021.03.21 1142
35 [데이터사이언스] 데이터 과학자를위한 3 가지 훌륭한 디자인 패턴, 3 Great Design Patterns for Data Scientists file 졸리운_곰 2021.03.04 784
34 [데이터분석] 시계열 데이터에 AI를 사용하는 이유는 무엇입니까? file 졸리운_곰 2021.02.28 1196
33 [데이터분석] AI 예측 및 이상 탐지를위한 시계열 데이터 전처리 file 졸리운_곰 2021.02.28 1044
32 [데이터분석] bitcoin analysis 비트 코인 시계열 데이터에 대한 AI 이상 탐지 file 졸리운_곰 2021.02.27 1603
31 [데이터분석 & 데이터 사이언스] How To Create a Data Science Portfolio Website file 졸리운_곰 2021.02.14 1835
30 [데이터수집4] 오픈 API 데이터 수집 (소셜미디어 데이터 수집) file 졸리운_곰 2020.06.12 1958
29 [데이터수집3] 관계형 데이터베이스 데이터 수집 file 졸리운_곰 2020.06.12 1322
28 [데이터수집2] 분산시스템 로그 수집 (빅데이터 수집) file 졸리운_곰 2020.06.12 1503
27 [데이터수집1] 웹 크롤링, 웹 스크래핑 file 졸리운_곰 2020.06.12 1807
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED