본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


aggregate5

MongoTemplate Aggregate 2 (lookup, unwind,first,last,push ..) 몽고db에서 자주 사용되는 집계함수 기능에 대해서 정리하여 보았다. 1. body 컬렉션 내용은 아래와 같다. 2. head 컬렉션 내용이다. 3. 단순 집계 기능이다. 조회, 그룹핑, 카운트 및 합계이다. 대상은 body 컬렉션이다. as 메소드는 불리우는 이름이다. public void simpleSingle(){ Aggregation agg = null; AggregationResults results = null; agg = Aggregation.newAggregation( Aggregation.project() //1. 매핑할 이름 .and("text").as("text_conv") //2.기존 도큐먼트 이름 바꾸기 가능 .and("type").as("type") .and("date").as(".. 2019. 9. 6.
Node.js mongoose Aggregate mongoose에서의 몽고db의 집계함수 실행은 mongodb에서의 쿼리와 형태가 거의 같다. 또한 java와 python과의 속도 비교에서도 거의 비슷하다. var mongoose = require("mongoose"); var Schema = mongoose.Schema; // Connection URL var url = 'mongodb://127.0.0.1:27017/admin'; mongoose.connect(url, { useNewUrlParser: true }); //옵션 파라미터는 몽고db버전에 따라 다르다 var structor = new Schema({ "date":Date, "random_text1" : String, "random_text2" : String }); structor.s.. 2019. 8. 1.
MongoTemplate Aggregate 사용간 파싱 버그 몽고db에서 집계함수를 통해서 통계작업을 하던 도중 당황스러운 버그를 보았다. CHOICE_INFO.REG_DATE는 일반 문자열 상수로 String 값을 가지며, 값은 reg_date라는 소문자를 넣어놨었다. 즉, 내가 가져오는 값은 date, date를 daying으로 바꾼 값 2개인데.. 위 스코드 어디에도 _id 를 키 또는 Projection에서 가져오는 구간이 없다. 그럼에도 불구하고 daying으로 이름을 바꾼 속성이 키 값으로 _id를 지정되서 나오는 모습을 보게 되었다.. 이런 황당한 버그를 보았나;; 아무튼 위 현상을 해결하기위해 간단한 소스코드 한줄을 추가하였다. 어디에도 쓰이지않는 아무의미없는 "1"이라는 값을 key, value로 가져오게 하자 위 현상이 멈추었다. 아마도.. Mo.. 2019. 7. 19.
Java를 활용한 MongoDB 대용량 집계, 억단위 Mongotemplate를 통해서 데이터를 집계하는 방법은 aggregate라는 함수를 호출하여 실시 한다. aggregate함수를 적은량의 데이터를 대상으로 실행하면 사실 문제가 되지 않는데, 데이터량이 많아진 경우에 한번에 집계를 실시하면 데이터베이스 서버 또는 동작중인 Java 어플리케이션이 OutofMemory 상태가 될 수 있다. 그럴때를 대비하여 집계함수 실행 간 최소, 최댓값을 설정하여 페이징 처리를 해야된다. 대략적으로 억단위 이상인 데이터에 대해서는 집계함수 실행시 페이징 처리를 해 주어야 문제가 생기지 않는 것 같다. 1억건 데이터를 기준으로 1천만건 단위로 집계하여 동작을 시키면 메모리는 2~3기가 정도 사용하며 cpu점유는 10%내외 하드디스크 입출력IO는 40%내외정도로 양호한 편.. 2019. 6. 28.
MongoTemplate Aggregate Mongotemplate를 활용해서 집계함수를 실행하는 방법이다. 아래와 같은 데이터가 있다고 하자. { "_id":ObjectId("507f1f77bcf86cd799439011"), //고유 아이디 "date" : ISODate("2019-06-21 10:03:46.000Z"), //날짜 데이터 "text":"test", //단순 텍스트 "number":1234, //숫자 "type1":"A", //그룹핑할 데이터1 "type2":"AA" //그룹핑할 데이터2 }, { "_id":ObjectId("54af1e77gcfq6qdr22u39914"), "date" : ISODate("2019-06-21 10:03:46.000Z"), "text":"text text..", "number":1234, "type.. 2019. 6. 21.