MongoDB에서 원하는 데이터를 찾기 위해 연산자를 사용
연산자 | 의미 |
---|---|
$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