- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
NoSQL [MongoDB] 강좌 4편 find() 메소드 활용 – sort(), limit(), skip()
2020.11.09 09:05
[MongoDB] 강좌 4편 find() 메소드 활용 – sort(), limit(), skip()
이번 강좌에선 find() 메소드를 더욱 더 활용하기 위해 필요한 sort(), limit(), skip() 메소드에 대해 배워보겠습니다. 그냥 find() 메소드를 사용하면 criteria 에 일치하는 모든 document 들을 출력해주기 때문에, 예를들어 페이지 같은 기능을 사용한다면 불적합하겠죠. 그렇다고 find() 메소드 자체에 어디부터 어디까지 불러오겠다 라고 설정하는 매개변수는 따로 없습니다.
find() 메소드를 사용했을 시 cursor 형태의 결과값을 반환하는데요, 이 객체가 가지고 있는 limit() 메소드와 skip() 메소드를 통하여 보이는 출력물의 갯수를 제한 할 수 있고, sort() 메소드를 사용하여 데이터를 순서대로 나열 할 수 있습니다.
샘플 데이터
쿼리 연습을 해보기 위해 샘플데이터를 추가하세요.
[
{ "_id": 1, "item": { "category": "cake", "type": "chiffon" }, "amount": 10 },
{ "_id": 2, "item": { "category": "cookies", "type": "chocolate chip" }, "amount": 50 },
{ "_id": 3, "item": { "category": "cookies", "type": "chocolate chip" }, "amount": 15 },
{ "_id": 4, "item": { "category": "cake", "type": "lemon" }, "amount": 30 },
{ "_id": 5, "item": { "category": "cake", "type": "carrot" }, "amount": 20 },
{ "_id": 6, "item": { "category": "brownies", "type": "blondie" }, "amount": 10 }
]
> use mongodb_tutorial
switched to db mongodb_tutorial
> db.orders.insert(
.... SAMPLE DATA
)
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 6,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
cursor.sort( DOCUMENT )
이 메소드는 데이터를 정렬할 때 사용됩니다. 매개변수로는 어떤 KEY 를 사용하여 정렬 할 지 알려주는 document 를 전달합니다.
이 document 의 구조는 다음과 같습니다.
{ KEY: value }
KEY 는 데이터의 field 이름이고, value 의 값은 1 혹은 -1 입니다. 이 값을 1로 설정하면 오름차순으로, -1로 하면 내림차순으로 정렬합니다.
또한 여러 KEY를 입력 할 수 있고 먼저 입력한 KEY가 우선권을 갖습니다.
예제1: _id 의 값을 사용하여 오름차순으로 정렬하기
> db.orders.find().sort( { "_id": 1 } )
{ "_id" : 1, "item" : { "category" : "cake", "type" : "chiffon" }, "amount" : 10 }
{ "_id" : 2, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 50 }
{ "_id" : 3, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 15 }
{ "_id" : 4, "item" : { "category" : "cake", "type" : "lemon" }, "amount" : 30 }
{ "_id" : 5, "item" : { "category" : "cake", "type" : "carrot" }, "amount" : 20 }
{ "_id" : 6, "item" : { "category" : "brownies", "type" : "blondie" }, "amount" : 10 }
예제2: amount 값을 사용하여 오름차순으로 정렬하고, 정렬한 값에서 id 값은 내림차순으로 정렬하기
> db.orders.find().sort( { "amount": 1, "_id": -1 } )
{ "_id" : 6, "item" : { "category" : "brownies", "type" : "blondie" }, "amount" : 10 }
{ "_id" : 1, "item" : { "category" : "cake", "type" : "chiffon" }, "amount" : 10 }
{ "_id" : 3, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 15 }
{ "_id" : 5, "item" : { "category" : "cake", "type" : "carrot" }, "amount" : 20 }
{ "_id" : 4, "item" : { "category" : "cake", "type" : "lemon" }, "amount" : 30 }
{ "_id" : 2, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 50 }
cursor.limit( value )
이 메소드는 출력할 데이터 갯수를 제한할 때 사용됩니다. value 파라미터는 출력 할 갯수 값 입니다.
예제3: 출력 할 갯수를 3개로 제한하기
> db.orders.find().limit(3)
{ "_id" : 1, "item" : { "category" : "cake", "type" : "chiffon" }, "amount" : 10 }
{ "_id" : 2, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 50 }
{ "_id" : 3, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 15 }
cursor.skip( value )
이 메소드는 출력 할 데이터의 시작부분을 설정할 때 사용됩니다. value 값 갯수의 데이터를 생략하고 그 다음부터 출력합니다.
예제4: 2개의 데이터를 생략하고 그 다음부터 출력
> db.orders.find().skip(2)
{ "_id" : 3, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 15 }
{ "_id" : 4, "item" : { "category" : "cake", "type" : "lemon" }, "amount" : 30 }
{ "_id" : 5, "item" : { "category" : "cake", "type" : "carrot" }, "amount" : 20 }
{ "_id" : 6, "item" : { "category" : "brownies", "type" : "blondie" }, "amount" : 10 }
응용
이 강좌에서 배운 메소드들의 반환값 역시 cursor 객체이기 때문에 위 메소드들을 중첩해서 사용 할 수 있습니다.
예제를 통하여 한번 응용 방법을 배워보겠습니다.
예제5: order 를 최신순으로 한 페이지당 2개씩 나타냅니다.
> var showPage = function(page){
... return db.orders.find().sort( { "_id": -1 } ).skip((page-1)*2).limit(2);
... }
> showPage(1)
{ "_id" : 6, "item" : { "category" : "brownies", "type" : "blondie" }, "amount" : 10 }
{ "_id" : 5, "item" : { "category" : "cake", "type" : "carrot" }, "amount" : 20 }
> showPage(2)
{ "_id" : 4, "item" : { "category" : "cake", "type" : "lemon" }, "amount" : 30 }
{ "_id" : 3, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 15 }
> showPage(3)
{ "_id" : 2, "item" : { "category" : "cookies", "type" : "chocolate chip" }, "amount" : 50 }
{ "_id" : 1, "item" : { "category" : "cake", "type" : "chiffon" }, "amount" : 10 }
마무리하며…
이제 find() 메소드를 충분히! 활용 할 수 있게되었습니다.
다음 강좌에선 document를 수정하는 update() 메소드에 대하여 알아보겠습니다.
[출처] https://velopert.com/516
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86101 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78618 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95333 |
| 6 |
품질경영기사 자료와 정보 (응시자격, 출제기준, 시험과목, 시험방법, 합격기준, 합격률 등)
| 졸리운_곰 | 2018.02.05 | 2625 |
| 5 |
품질경영기사 독학 난이도
| 졸리운_곰 | 2018.02.05 | 3421 |
| 4 |
품질경영기사_공식요약(필기, 실기)_요점 및 핵심정리
| 졸리운_곰 | 2018.02.05 | 4354 |
| 3 |
품질경영기사 요점정리
| 졸리운_곰 | 2018.02.04 | 3048 |
| 2 |
[품질경영산업기사]직접 시험 본 후기 및 조언입니다
| 졸리운_곰 | 2018.02.03 | 2572 |
| 1 |
<품질경영기사 독학하시는 분들을 위한 공부방법 TIP!>
| 졸리운_곰 | 2018.02.03 | 3063 |

