# MongoDB 정규표현식으로 검색시 대소문자 무시하는 방법먼저 일반적 방법으로 find()를 사용하여 검색시 정규표현식을 적용한다면 아래와 같이 쿼리문을 사용할 수 있습니다. 아래 예제는 컬렉션에서 sitename 컬럼에 정규식을 사용... 'web'이 포함된 값을 찾게됩니다.
위 쿼리문은 web의 대소문자 구분을 하지 않습니다. 만약 web, WEB 처럼 대소문자 구분없이 모든 값을 찾으려면? 이 경우 $option 값을 추가해야합니다. 아래는 수정된 쿼리문입니다.
@ 수정 후 MongoDB 쿼리
출처 : https://webisfree.com/2017-08-10/mongodb%EC%97%90%EC%84%9C-%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90-%EA%B5%AC%EB%B6%84%ED%95%98%EC%A7%80-%EC%95%8A%EA%B3%A0-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%EC%B0%BE%EB%8A%94-%EB%B0%A9%EB%B2%95
# collections export ; mongoexport
mongoexport --db 데이터베이스명 --collection 컬렉션명 --out export하고싶은파일명.json
위 명령어는 mongo 밖에서 실행.
export한 json 파일을 다시 import 하여 백업용으로 남기거나 혹은 scp로 로컬 저장시 많이 사용하는 것 같다.
# 쿼리 결과 find() 파일로 Export 하기 : 로직을 통해 구현해야하는 것 같다 ...
데이터 읽기 (find)
- find
find명령어는 아래와 같은 구조로 되어 있습니다.
db.collection.find( query, projection )
db.employee.find({})
SELECT * FROM employee WHERE status = 'C' 와 같은 의미 입니다.
db.employee.find({status : "C"})
db.employee.find({status : "C"}, {ename : 1})
db.employee.find({status : "C"}, {_id: 0, ename : 1})
{ <field1>: { <operator1>: <value1> }, ... }
db.employee.find({status : { $eq : "C"}}, {_id: 0, ename : 1})height 160 보다 큰 직원을 조회합니다.
db.employee.find({height : { $gt : 160}})height 170보다 크거나 같은 직원을 조회합니다.
db.employee.find({height : { $gte : 170}})
db.employee.find({height : { $in : [170, 185]}})height가 170보다 작은 직원을 조회합니다.
db.employee.find({height : { $lt : 170}})height가 170보다 작거나 같은 직원을 조회합니다.
db.employee.find({height : { $lte : 170}})height가 170이 아닌 직원을 조회합니다.
db.employee.find({height : { $ne : 170}})height가 170인 사람과 185가 아닌 직원을 조회합니다.
db.employee.find({height : { $nin : [170, 185]}})
db.employee.find({height : {$gte : 170, $lte:185}})
이름 | 설명 |
---|---|
$eq | 값을 비교하여 동일한 값을 찾는 연산자 |
$gt | 값을 비교하여 지정된 값보다 큰 값을 찾는 연산자 |
$gte | 값을 비교하여 지정된 값보다 크거나 같은 값을 찾는 연산자 |
$in | 배열 안의 값을 비교하여 동일한 값을 찾는 연산자 |
$lt | 값을 비교하여 지정된 값보다 작은 값을 찾는 연산자 |
$lte | 값을 비교하여 지정된 값보다 작거나 큰 값을 찾는 연산자. |
$ne | 값을 비교하여 동일하지 않은 값을 찾는 연산자 |
$nin | 배열 안의 값을 비교하여 동일하지 않는 값을 찾는 연산자 |
db.employee.find({ $and : [{height : {$gte : 170}}, { status : {$eq : "C"}}] })
db.employee.find({ $or : [{height : {$gte : 170}}, { status : {$eq : "C"}}] })
db.employee.find({height : {$not : {$lte : 180}}})
{ field: { $not: { <operator-expression> } } }
이름 | 설명 |
---|---|
$and | 배열안 두개 이상의 조건이 모두 참인 경우를 반환 |
$not | 해당 조건이 맞지 않는 경우와 해당 필드가 없는 경우를 모두 반환 |
$nor | 배열안 두개 이상의 조건이 모두 아닌 경우 를 반환 |
$or | 배열안 두개 이상의 조건 중 하나라도 참이면 반환 |
db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" } , { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" } , { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" } , { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" } , { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" } ]);
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
db.inventory.find( { "size.uom": "cm" } )size 값 중 h값이 10보다 작은 값을 구합니다.
db.inventory.find( { "size.h": {$lt : 10} } )size 값 중 h값이 10보다 작고 status 가 A 인 문서를 구합니다.
db.inventory.find( { "size.h": {$lt : 10}, status : "A"} )
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] } , { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] } , { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] } , { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] } , { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] } ]);다음은 tags 필드에 오직 red값과 blank값만 배열에 존재하는 문서를 조회합니다.
db.inventory.find( { tags: ["red", "blank"] } )
db.inventory.find( { tags: { $all: ["red", "blank"] } } )이 경우는 red와 blank를 포함하고 다른 것들이 포함된 경우도 함께 출력됩니다.
db.inventory.find( { tags: "red"} )위 결과는 red가 배열에 포함된 모든 문서를 출력합니다.
db.inventory.find( { dim_cm: {$gte : 25}} )다음은 dim_cm필드에서 1번째 위치 즉 0번 인덱스에 있는 값 중 14이상인 값을 구합니다.
db.inventory.find( { "dim_cm.0": {$gte : 14}} )
db.inventory.find( { tags : {$size : 2}} )5) Embbedded Document내에서 배열값 조회
db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 } , { warehouse: "C", qty: 15 } ] } , { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] } , { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] } , { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] } , { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] } ]);
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
db.inventory.find( { 'instock.0.qty': { $gte: 40 } } )다음은 instock 필드에서 qty가 5이고 warehouse 값이 A인 문서를 조회합니다. 순서는 상관 없습니다.
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )6) 조회 결과에서 필드 표시 여부
db.inventory.find( { status: "A" }, { item: 1, status: 0 } )아래의 식은 item 필드와, status 필드 그리고 _id필드가 표시 됩니다.
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
db.inventory.find( { status: "A" }, { item: 0, status: 0 } )Embedded(내장) 된 문서의 필드 표시는 아래와 같습니다.
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
db.inventory.find( { item: null } )
db.inventory.find( { item : { $exists: false } } )
var myCursor = db.users.find( { type: 2 } ); while (myCursor.hasNext()) { printjson(myCursor.next()); }
var myCursor = db.users.find( { type: 2 } ); myCursor.forEach(printjson);
var myCursor = db.inventory.find( { type: 2 } ); var documentArray = myCursor.toArray(); var myDocument = documentArray[3];
출처: http://cionman.tistory.com/48 [Suwoni블로그]
'Others > 데이터베이스' 카테고리의 다른 글
맥 osx에 mongodb 설치 및 테스트 Hello world (0) | 2018.09.13 |
---|---|
Redis (1) | 2018.07.04 |
트랜잭션이란 (0) | 2018.03.26 |
SQL 에서 inner join, outer join 의 차이점 (0) | 2018.03.26 |
[Postgresql] brew로 설치한 Postgresql 서버 시작하기 (1) | 2018.01.28 |