[Database] MongoDB Operator

게맛살맛게·2021년 12월 23일
1

DB

목록 보기
20/23
post-thumbnail
post-custom-banner

MongoDB 연산자

Query 연산자

MongoDB에서 원하는 데이터를 찾기 위해 연산자를 사용

  • 비교(Comprison), 논리(Logical), 요소(Element), 배열(Array) 등

비교 연산자

연산자의미
$eq(equals)주어진 값과 일치하는 값
$gt(greater than)주어진 값보다 큰 값
$gte (greather than or equals)주어진 값보다 크거나 같은 값
$lt(less than)주어진 값보다 작은 값
$lte (less than or equals)주어진 값보다 작거나 같은 값
$ne(not equal)주어진 값과 일치하지 않는 값
$in주어진 배열 안에 속하는 값
$nin주어빈 배열 안에 속하지 않는 값

논리 연산자

연산자의미
$or주어진 조건중 하나라도 true 일 때 true
$and주어진 모든 조건이 true 일 때 true
$not주어진 조건이 false 일 때 true
$nor주어진 모든 조건이 false 일때 true



정규표현식

$regex 정규표현식에 매칭되는 값

표현식

표현식의미
^x문자열의 시작을 표현, x 문자로 시작됨 (Like x%와 유사)
x$문자열의 종료를 표현, x 문자로 종료됨 (Like %x와 유사)
.x임의의 한 문자의 자리수를 표현 (Like _x와 유사)
x+반복 표현, x 문자가 한 번 이상 반복
x?존재여부 표현, 존재할수도 존재하지 않을 수도 있음을 의미
x*반복여부 표현, 문자가 0번 또는 그 이상 반복됨
x{n}반복 표현, x문자가 n번 반복됨
x{n,}반복 표현, x문자가 n번 이상 반복됨
x{n,m}반복 표현, x문자가 최소 n번이상, 최대 m번 이하 반복됨
x|y
[xy]
[x-z]
or을 표현, x 또는 y문자가 존재함을 의미
or을 표현, x 또는 y문자가 존재함을 의미
or을 표현, x부터 z까지의 문자가 존재함을 의미
(xy)그룹 표현, xy를 한 그룹으로 처리
(x)(y)그룹들의 집합을 표현, 앞에서부터 순서대로 번호를 부여하여 관리
x와 y는 각 그룹의 데이터로 관리 됨
(x)(?:y)그룹들의 집합에 대한 예외를 표현, 그룹 집합으로 관리되지 않음을 의미

$regex 연산자를 사용하지 않아도 조건을 정규식 표현 객체로 지정하면 정규표현식을 적용하여 도큐먼트 탐색

db.book.find({"name": /^java/})		// java로 시작하는
db.book.find({"name": /java/})		// java를 포함하는
db.book.find({"name": /java$/})		// java로 끝나는
db.book.find({"name": /j|a|v|/})	// j 또는 a 또는 v를 포함하는
db.book.find({"name": /[jav]/})		// j 또는 a 또는 v를 포함하는
db.book.find({"name": /[a-k]/})		// a,b,c,d,e,f,g,h,i,j,k 중에서 하나를 포함하는

연산자와의 활용

> db.inventory.find( { item: { $not: /^p.*/ } } )
{ "_id" : ObjectId("61c3cbff3067e85d42398826"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("61c3cbff3067e85d42398827"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }

> db.inventory.find( { item: { $not: { $regex: "^p.*" } } } )
{ "_id" : ObjectId("61c3cbff3067e85d42398826"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("61c3cbff3067e85d42398827"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }

> db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
{ "_id" : ObjectId("61c3cbff3067e85d42398826"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("61c3cbff3067e85d42398827"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }



{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }
> db.products.find( { sku: { $regex: /789$/ } } )
> db.products.find( { sku: { $regex: /^ABC/i } } )
> db.products.find( { description: { $regex: /^S/, $options: 'm' } } )		// m: 행바꿈이 인식 될 때 마다 정규식 일치 여부 확인
> db.products.find( { description: { $regex: /m.*line/, $options: 'si' } } 	// s : 공백문자 ➡ 일반문자 취급, i : case-insensitive
profile
IT 기술블로그
post-custom-banner

0개의 댓글