컬렉션 문서검색
▪ find()는 컬렉션 안에 저장된 문서들을 검색하는 함수
▪ <검색_조건> 인자는 필드명과 필드값의 쌍으로, 검색 대상 문서를 필터링하여, 일치하는 문서들을 반환
▪ 일부 필드 정보만 검색하고 싶다면, <검색_필드목록>에 원하는 필드 이름들을 추가로 작성
▪ 문서 하나를 검색하려면 findOne()
( find( {< 검색_ _ 조건, >}, {< 검색_ _ 필드목록} >} ) )
<검색_조건> 작성방법
{ { 필드명: : 상수값} }
<검색_필드목록> 작성방법
{ { 필드명: : 논리값, , 필드명n n: : 논리값n n } }
▪ 검색한 문서의 모든 필드 정보를 반환받을 필요가 없는 경우도 있음, <검색_필드목록> 인자는 어떤 필드값을 검색결과로 반환할지를 결정
▪ <검색_필드목록> 인자를 생략하면 검색 결과에 모든 필드 정보가 포함
▪ <검색_필드목록> 인자 안에는 검색할 모든 필드들의 값을 'true'(또는 1)로 설정하거나, 검색하지 않을 모든 필드들의 값을 'false'(또는 0)를 설정하는 두 가지만 가능
▪ 즉, '_id' 필드를 제외만 나머지 필드들은 'true'(또는 1)와 false'(또는 0)두 값 중 하나를 필드값으로 설정
▪ '_id’ 필드는 기본적으로 검색 결과에 포함되며, 'false'(또는 0)로 설정할때만 반환되는 검색 결과에서 제외
[실습]
> db.비회원.find( )
> db.비회원.find({})
> db.비회원.find({비회원이름:”이승기”})
> db.비회원.find({나이:22, 비회원이름:”이민기"})
> db.영화.find({}, {영화제목: true, 상영시간: true})
> db.영화.find({등급: “A”}, {영화제목:1 1, , 상영시간:1 1})
> db.비회원.find({}, , {_ _ id: : false, , 나이:0 0} )
> db.비회원.find( ) //모든 문서 검색
> db.비회원.find({}) //모든 문서 검색
> db.비회원.find({비회원이름:”이승기”}) //조건 검색
> db.비회원.find({나이:22, 비회원이름:”이민기"}) //조건 검색, AND
> db.영화.find({}, {영화제목: true, 상영시간: true}) //해당 필드 목록만 조회
> db.영화.find({등급: “A”}, {영화제목:1 1, , 상영시간:1 1}) //해당 필드 목록만 조회
> db.비회원.find({}, , {_ _ id: : false, , 나이:0 0} ) //해당 필드 목록만 제외하고 조회
1 검색비교연산자 : $eq, $ne, $gt, $gte, $It, $Ite
▪ 필드값 검색 조건이 범위 값일 경우에는 <검색_조건> 인자 안에 여러 <비교_연산자>를 사용, '$'접두사로 시작
▪ '$eq'(=)는 같다, '$ne'(≠)는 다르다
▪ '$gt'(>)는 크다, '$gte'(>=)는 크거나 같다
▪ '$lt'(<)는 작다, '$Ite'(<=)는 작거나 같다
▪ '$all'은 순서와 상관없이 조건에 해당하는 배열 요소를 모두 가지고 있으면 검색 결과에 포함
<검색_ 조건> 작성방법
필드명: { < <$ $ 비교_ _ 연산자1 1> >: : " " 값1 1, ", < <$ $ 비교_ _ 연산자2 2> >: : " " 값2 2, ", }
> db.영화.find()
> db.영화.find({"상영시간.시간": {$gte: 2, $lte:3}})
> db.영화.find({영화제목: {$eq: "기생충"}})
> db.영화.find({영화제목: "기생충"})
> db.영화.find({개봉날짜: {$gt: "2020-1-1"}})
➢ db.영화.find({출연배우: {$all: ["송강호", "이선균"]}})
➢ db.영화.find({출연배우: ["송강호", "이선균"]}) // 일치하지 않아서 검색 안됨
➢ db.영화.find({출연배우: ["송강호", "이선균", "조여정"]})
➢ db.영화.find({출연배우: ["송강호", "조여정", "이선균"]}) //일치하지 않아서 검색 안 됨
2 검색논리연산자 : $and, $or, $in, $nin
▪ AND 조건은 논리 연산자 없이 콤마(,)로 조건들을 나열 '$and' 논리 연산자를 사용해도 됨
▪ OR 조건은 반드시 '$or' 논리 연산자를 사용, '$or' 연산자를 이용하여 <검색 조건> 인자에 특정 필드를 두 개 이상 콤마(,)로 구분하여 나열하면, 여러 조건들 중 하나라도 만족하는 문서를 검색하여 반환
▪ '$in' 연산자는 나열된 값들 중 하나라도 일치하는 경우를 검색
▪ '$nin' 연산자는, not in의 의미이며, 나열된 값들 중 어떤 것과도 일치하지 않는 경우를 검색
> db.회원.find{ ({ $ $ and: : { [{ 나이: : 24, }, { { 회원이름: : " " 홍나리" "] }] ) })
> db.회원.find({회원이름:"홍나리", 나이:24})
> db.회원.find({나이:24, 회원이름: "홍나리"})
> db.비회원.find{ ({$ $ or: : { [{ 나이: : { {$ $ in: : [ [ 22, , 23, , 24, ]}}, { { 비회원이름: : " " 이승기" "] }]) })
> db.영화.find({ 등급: : { {$ $ nin: : ["B"]}})
> db.영화.find({ 등급: : {$ $ in: : ["A","C"]}})
> db.영화.find{ ({" " 상영시간. . 시간" ":1, " 상영시간. . 분": {$gte:30} ) })
> db.영화.find({" 상영시간. . 분": {$gte:30}, " 상영시간. . 시간":1 })
> db.영화.find({"댓글평가.댓글작성자": /^ 홍/ /, , "댓글평가.평점": {$gt: 80} })
3 검색문자열 연산자: $regex
▪ 문자열의 부분 조건으로 문서를 검색
▪ regex는 문자열의 <정규식>을 표현할 때 많이 사용되는 명령
▪ <정규식>은 특정한 규칙을 가진 문자열의 집합을 검색하기 위해, 검색 조건으로 작성하는 표현 식
<정규식> 작성방법
{ {$ $ regex: : /< 문자열_ 패턴 >/}
< < 문자열_패턴 > 예 의미
/한/ /와 /사이의 문자열('한')이 한번 이상 존재(1~n)
/^한/ ^기호 바로 뒤의 문자('한')로 문자열이 시작
/한$/ $기호 바로 앞의 문자('한')로 문자열이 끝남
[한, 국, ...] 대괄호 안에 있는 문자('한','국', ...)들이 존재하는지 검색
> db.영화.find{ ({ 영화제목: :{ {$ $ regex: : /^ 기/ /} } ) })
> db.영화.find({영화제목:/ / 량$ $/ /})
> db.영화.find({영화제목:/ / 생/ /})
> db.영화.find({영화제목:/ / 명량[ [1 1- -3 3/ ]/ })
> db.영화.find({영화제목: { {$ $ regex: : / / 명량[ [1 1- -3 3, ]/, $ $ not: : / / 명량2 2/ /} }})
4 검색결과의 정렬, 생략, 제한: sort(), skip(), limit()
> db.영화.find( ).sort({영화제목:1, 개봉날짜:-1})
> db.영화.find( ). skip(1 1)
> db.영화.find( ). limit(2 2) )
> db.영화. findOne( ( ) )
'SQL' 카테고리의 다른 글
| 오라클 힌트(Hint) 구문 (0) | 2025.05.15 |
|---|---|
| 테이블 컬럼 정의서 추출 SQL - PostgreSQL (0) | 2025.03.05 |
| 오라클 여러 행(ROW)을 하나의 컬럼(COLUMN)으로 합치기 (0) | 2024.11.18 |
| DBMS별 테이블 컬럼 정의서 추출 - 오라클, MYSQL, MSSQL, CUBRID, SYBASE, TIBERO (0) | 2022.03.29 |
| MS SQL 미사용 테이블 확인 SQL (0) | 2022.03.24 |


